Mostrando entradas con la etiqueta secure store service. Mostrar todas las entradas
Mostrando entradas con la etiqueta secure store service. Mostrar todas las entradas

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