Fragmento de código: Obtención de credenciales de usuario mediante el proveedor de almacenamiento seguro predeterminado
Última modificación: viernes, 14 de mayo de 2010
Hace referencia a: SharePoint Server 2010
En el siguiente ejemplo de código se muestra cómo obtener credenciales de usuario a través del proveedor de almacenamiento seguro predeterminado.
Requisitos previos:
Microsoft SharePoint Server 2010
Microsoft .NET Framework 3.5
Para usar este ejemplo
Inicie Microsoft Visual Studio y, a continuación, cree un nuevo proyecto de aplicación de consola de C#. Seleccione .NET Framework 3.5 cuando cree el proyecto.
En el menú Ver, seleccione Páginas de propiedades para que aparezcan las propiedades del proyecto.
En la ficha Compilación, para el Destino de la plataforma, seleccione Cualquier CPU.
Cierre la ventana de propiedades del proyecto.
En el Explorador de soluciones, en Referencias, quite todas las referencias del proyecto excepto System y System.Core.
Agregue las siguientes referencias al proyecto:
Microsoft.BusinessData
Microsoft.Office.SecureStoreService
Microsoft.SharePoint
System.Web
Reemplace el código generado automáticamente en Program.cs con el código que aparece al final de este procedimiento.
Reemplace el valor de appId con el nombre de la aplicación de destino de almacenamiento seguro. Tenga en cuenta que la aplicación de destino de almacenamiento seguro que se usa en este ejemplo es una aplicación de tipo Individual que contiene lo siguiente: nombre de usuario (no es el nombre de usuario de Windows), contraseña (no es la contraseña de Windows) y un PIN.
Presione F6 para crear la solución.
Presione Ctrl + F5 para ejecutar el ejemplo.
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;
using Microsoft.BusinessData.Infrastructure.SecureStore;
using Microsoft.Office.SecureStoreService.Server;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
namespace Microsoft.SDK.Sharepoint.Samples
{
class Program
{
static void Main(string[] args)
{
// Get the default Secure Store Service provider.
ISecureStoreProvider provider = SecureStoreProviderFactory.Create();
if (provider == null)
{
throw new InvalidOperationException("Unable to get an ISecureStoreProvider");
}
ISecureStoreServiceContext providerContext = provider as ISecureStoreServiceContext;
providerContext.Context = SPServiceContext.GetContext(GetCentralAdminSite());
// Create the variables to hold the credentials.
string userName = null;
string password = null;
string pin = null;
// Specify a valid target application ID for the Secure Store.
string appId = "mySecureStoreTargetApplication";
try
{
// Because we are getting the credentials in the using block, all the credentials that we get
// will be disposed after the using block. If you need to cache the credentials, do not
// use the using block, and dispose the credentials when you are finished.
//
// In the following block, we are looking for the first user name, password, and pin
// credentials in the collection.
using (SecureStoreCredentialCollection creds = provider.GetCredentials(appId))
{
// Secure Store Service will not return null. It may throw a SecureStoreServiceException,
// but this may not be true for other providers.
Debug.Assert(creds != null);
if (creds != null)
{
foreach (SecureStoreCredential cred in creds)
{
if (cred == null)
{
// Secure Store Service will not return null credentials, but this may not be true for other providers.
continue;
}
switch (cred.CredentialType)
{
case SecureStoreCredentialType.UserName:
if (userName == null)
{
userName = GetStringFromSecureString(cred.Credential);
}
break;
case SecureStoreCredentialType.Password:
if (password == null)
{
password = GetStringFromSecureString(cred.Credential);
}
break;
case SecureStoreCredentialType.Pin:
if (pin == null)
{
pin = GetStringFromSecureString(cred.Credential);
}
break;
}
}
}
}
if (userName == null || password == null || pin == null)
{
throw new InvalidOperationException("Unable to get the credentials");
}
// Use the credentials.
//
// Note that it is not a secure programming practice to print credential information, but this code example
// prints the credentials to the console for testing purposes.
Console.WriteLine("User Name: " + userName);
Console.WriteLine("Password : " + password);
Console.WriteLine("Pin : " + pin);
}
catch (SecureStoreException e)
{
Console.WriteLine(e.Message);
throw;
}
}
private static string GetStringFromSecureString(SecureString secStr)
{
if (secStr == null)
{
return null;
}
IntPtr pPlainText = IntPtr.Zero;
try
{
pPlainText = Marshal.SecureStringToBSTR(secStr);
return Marshal.PtrToStringBSTR(pPlainText);
}
finally
{
if (pPlainText != IntPtr.Zero)
{
Marshal.FreeBSTR(pPlainText);
}
}
}
public static SPSite GetCentralAdminSite()
{
SPAdministrationWebApplication adminWebApp = SPAdministrationWebApplication.Local;
if (adminWebApp == null)
{
throw new InvalidProgramException("Unable to get the admin web app");
}
SPSite adminSite = null;
Uri adminSiteUri = adminWebApp.GetResponseUri(SPUrlZone.Default);
if (adminSiteUri != null)
{
adminSite = adminWebApp.Sites[adminSiteUri.AbsoluteUri];
}
else
{
throw new InvalidProgramException("Unable to get Central Admin Site.");
}
return adminSite;
}
}
}