Extrait de code : Obtenir des informations d’identification utilisateur à l’aide du fournisseur de banque sécurisée par défaut
Dernière modification : vendredi 14 mai 2010
S’applique à : SharePoint Server 2010
L’exemple de code suivant montre comment obtenir des informations d’identification utilisateur à l’aide du fournisseur de banque sécurisée par défaut.
Conditions préalables requises :
Microsoft SharePoint Server 2010
Microsoft .NET Framework 3.5
Pour utiliser cet exemple
Démarrez Microsoft Visual Studio et créez un projet d’application console C#. Sélectionnez .NET Framework 3.5 lors de la création du projet.
Dans le menu Affichage, sélectionnez Pages des propriétés pour afficher les propriétés du projet.
Sous l’onglet Générer, pour Plateforme cible, sélectionnez Any CPU.
Fermez la fenêtre de propriétés du projet.
Dans l’Explorateur de solutions, sous Références, supprimez toutes les références du projet à l’exception de System et System.Core.
Ajoutez les références suivantes au projet :
Microsoft.BusinessData
Microsoft.Office.SecureStoreService
Microsoft.SharePoint
System.Web
Remplacez le code généré automatiquement dans Program.cs par le code fourni à la fin de cette procédure.
Remplacez la valeur d’appId par le nom de l’application cible Banque sécurisée. Notez que l’application cible Banque sécurisée utilisée dans cet exemple est une application de type Individual qui contient les éléments suivants : nom d’utilisateur (pas le nom d’utilisateur Windows), mot de passe (pas le mot de passe Windows) et un code PIN.
Appuyez sur F6 pour générer la solution.
Appuyez sur Ctrl+F5 pour exécuter l’exemple.
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;
}
}
}