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);
}
}