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

mostrar error detallado en sharepoint

Sharepoint por defecto muestra un mensaje de error que muchas veces no es suficiente para saber exactamente la causa del error, las siguientes instrucciones indican cómo activar la descripción detallada acerca del error que esta pasando.

Modificar los webconfig en las carpetas

  • C:\inetpub\wwwroot\wss\VirtualDirectories\<web app port>\web.config
  • C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\web.config

La primera ruta puede ser accedida a través del IIS, dando click derecho sobre la aplicación a la cual queremos realizar la configuración y seleccionado la opción explorar, esta acción nos llevara a la carpeta donde se encuentra el web.config.
En los tags SafeMode y customErrors hacer los siguientes cambio para ambos archivos:
antes:
<SafeMode MaxControls=“200“ CallStack=“false“ DirectFileDependencies=“10“ TotalFileDependencies=“50“ AllowPageLevelTrace=“false“>
despues:
<SafeMode MaxControls=“200“ CallStack=“true“ DirectFileDependencies=“10“ TotalFileDependencies=“50“ AllowPageLevelTrace=“true“>
antes:
<customErrors mode=“On“ />
después:
<customErrors mode=“Off“ />