martes, 17 de junio de 2014

Acceder a secure store service desde código en sharepoint 2013

Para acceder al secure store service desde código se debe hacer lo siguiente:

Añadir las siguientes referencias al proyecto de sharepoint desde donde se quiere acceder al sercure store service

- Microsoft.BusinessData
- Microsoft.Office.SecureStoreService

La ubicación de los dll se encuentran en el GAC en la carpeta

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\

En archivo.cs que accedera añadir los siguientes using

using Microsoft.SharePoint.Administration;
using Microsoft.Office.BusinessData.Infrastructure.SecureStore;
using Microsoft.Office.SecureStoreService.Server;
using System.Security;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Microsoft.BusinessData;
using System.ComponentModel;

Los dos siguientes métodos son lo necesarios para acceder desde código a las credenciales creadas en el secure store service, el método GetValues, toma como parametro serviceContext obtenido mediante SPServiceContext.Current, y como segundo parámetro el target application ID donde se encuentran las credenciales.

private Dictionary<string,string> GetValues(SPServiceContext serviceContext,string applicationID) {

SecureStoreProvider secureStoreProvider = new SecureStoreProvider { Context = serviceContext };
           var values = new Dictionary<string,string>();
           using( var credentials = secureStoreProvider.GetCredentials(applicationID)) {
                   var fields = secureStoreProvider.GetTargetApplicationFields(applicationID);
                   for(var i=0; i<fields.Count; i++) {
                       var field = fields[i];
                       var credential = credentials[i];
                       var decryptedCredential = ToClrString(credential.Credential);
                       values.Add(field.Name, decryptedCredential);
                   }
           }
           return values;
       }

       public string ToClrString( SecureString secureString)
       {
           var ptr = Marshal.SecureStringToBSTR(secureString);
           try{
               return Marshal.PtrToStringBSTR(ptr);
           }
           finally{
               Marshal.FreeBSTR(ptr);
           }
       }

No hay comentarios:

Publicar un comentario