コード スニペット: 既定の Secure Store プロバイダーを使用してユーザー資格情報を取得する
最終更新日: 2010年5月14日
適用対象: SharePoint Server 2010
以下のコード例は、既定の Secure Store プロバイダーを使用してユーザー資格情報を取得する方法を示しています。
前提条件:
Microsoft SharePoint Server 2010
Microsoft .NET Framework 3.5
この例を使用するには
Microsoft Visual Studio を開始し、新しい C# コンソール アプリケーション プロジェクトを作成します。プロジェクトを作成するときに、[.NET Framework 3.5] を選択します。
[表示] メニューから、[プロパティ ページ] を選択してプロジェクト プロパティを表示します。
[ビルド] タブから、[プラットフォーム ターゲット] で、[Any CPU] を選択します。
プロジェクト プロパティ ウィンドウを閉じます。
[ソリューション エクスプローラー] の [参照設定] で、[System] と [System.Core] を除いて、すべてのプロジェクト参照を削除します。
プロジェクトに以下の参照を追加します。
Microsoft.BusinessData
Microsoft.Office.SecureStoreService
Microsoft.SharePoint
System.Web
この手順の最後に示すコードで、Program.cs が自動生成したコードを置換します。
appId の値を、Secure Store ターゲット アプリケーションの名前で置換します。この例で使用する Secure Store ターゲット アプリケーションは、ユーザー名 (Windows ユーザー名ではない)、パスワード (Windows パスワードではない)、および PIN を含む Individual 型のアプリケーションです。
F6 を押して、ソリューションをビルドします。
Ctrl+F5 を押して、サンプルを実行します。
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;
}
}
}