重要
レガシ コンテンツ この記事は、履歴参照でのみ保持されます。 Silverlight および Windows Phone アプリケーション用の非推奨の SharePoint 認証 API について説明します。
これらの API とプラットフォームはサポートされなくなりました。 現在の開発ガイダンスについては、次を使用します。
- Microsoft Authentication Library (MSAL)
- Microsoft Graph API
- OAuth 2.0 を使用した SharePoint Online REST API
Silverlight の SharePoint クライアント オブジェクト モデルの認証 API を使った開発の概要について説明します。
Windows Phone の認証とクライアント コンテキスト
Windows Phone 7.5 で SharePoint ユーザーを認証するプロセスは、クライアント コンピューターの認証プロセスとは少し異なります。 Windows Phone 7.5 のクライアント コードでは、最初に Authenticator クラスまたは ODataAuthenticator クラスのオブジェクトが作成されます。これは、Windows Phoneの Microsoft Silverlight のSharePointClient オブジェクト モデルに追加されました。 その後このオブジェクトをユーザーの資格情報として使用します。
注:
このセクションで説明する API の詳細については、「 SharePoint モバイル オブジェクト モデルの概要」を参照してください。 Silverlight の SharePoint クライアント オブジェクト モデルの詳細については、「 マネージド クライアント オブジェクト モデル 」と「 Silverlight オブジェクト モデルの使用」を参照してください。
Silverlight の SharePoint クライアント オブジェクト モデルでのユーザー認証
認証されたクライアント コンテキスト オブジェクトの取得に必要な手順を次に示します。
ClientContextオブジェクトを取得します。新しい
Authenticatorオブジェクトを構築し、そのプロパティを初期化します。注:
1 つの
Authenticatorオブジェクトは、1 つのClientContextオブジェクトでのみ使用できます。 URL が異なる複数のClientContextオブジェクト間でAuthenticatorオブジェクトを共有することはできません。Authenticatorクラスは、ICredentialsインターフェイスを実装するため、オブジェクトをClientContextオブジェクトのCredentialsプロパティに割り当てます。
その後、残りのクライアント オブジェクト モデル コードを追加し、 ExecuteQueryAsyncを呼び出すことができます。
次のコードで、これらの手順を示します。
ClientContext context = new ClientContext(ListUrl);
// Create an instance of Authenticator object.
Authenticator at = new Authenticator();
// Replace <username> and <password> with valid values.
at.UserName = "<username>";
at.Password = "<password>";
at.AuthenticationMode = ClientAuthenticationMode.FormsAuthentication;
at.CookieCachingEnabled = true;
// Assign the instance of Authenticator object to the ClientContext.Credential property.
// ClientContext is the object that is central to the client object model for making
// calls to the server running SharePoint for fetching and updating data.
context.Credentials = at;
ListItemCollection items = context.Web.Lists.GetByTitle(ListName)
.GetItems(CamlQuery.CreateAllItemsQuery());
// Load the query and execute the request to fetch data.
context.Load(items);
context.ExecuteQueryAsync(
(object obj, ClientRequestSucceededEventArgs args) => {
// Success logic
},
(object obj, ClientRequestFailedEventArgs args) =>{
// Failure logic
});
必要に応じて、 Authenticator.UagServerUrl プロパティを設定して、Unified Access Gateway (UAG) サーバーを指定できます。
SharePoint URL に基本的な認証またはフォーム ベースの認証がサポートされている場合、 ExecuteQueryAsync 呼び出しは、図 1 に示すようにユーザーにサインイン情報の入力を求めます。 サポートしていない場合は呼び出しは失敗します。 認証エラーを避けるには SharePoint サイトで基本認証またはフォームベース認証の承認を有効にします。
図 1. SharePoint クライアント認証
図 1 に示すように、ユーザーはユーザー名とパスワードを入力して [ ログオン] を選択します。 また、[ このアカウントを記憶する] をオンにしてユーザー名を記憶したり、[ パスワードを保存する] をオンにしてパスワードを記憶したりできます。 ユーザー名とパスワードを記憶した後で、次にアプリケーションを起動したときにはユーザーは資格情報を入力する必要はありません。
ExecuteQueryAsyncでは、ログオンした資格情報を使用して、SharePoint を実行しているサーバーに Web 要求を行ってデータをフェッチします。
SharePoint OData オブジェクト モデルでのユーザー認証
認証された OData コンテキスト オブジェクトの取得に必要な手順を次に示します。
- 新しい
ODataAuthenticatorオブジェクトを構築し、そのプロパティを初期化します。 - AuthenticationCompleted イベント用のハンドラーを登録します。
-
authenticationCompleted イベントを発生させる
ODataAuthenticator.Authenticateメソッドを呼び出します。 -
OnAuthenticationCompletedハンドラー内で OData コンテキスト オブジェクトを取得します。
その後、OData 呼び出しの残りの部分を OnAuthenticationCompleted ハンドラーに追加できます。
次のコードで、これらの手順を示します。
ODataAuthenticator oat = new ODataAuthenticator();
// Replace <username> and <password> with valid values.
oat.UserName = "<username>";
oat.Password = "<password>";
oat.AuthenticationMode = ClientAuthenticationMode.FormsAuthentication;
oat.AuthenticationCompleted +=
new EventHandler<SendingRequestEventArgs>(OnAuthenticationCompleted);
// The Authenticate method will raise the AuthenticationCompleted event.
oat.Authenticate("My_service_URL");
次のセクションで説明するように、コードにはさらに 2 つのイベント ハンドラーを実装する必要があります。
OnAuthenticationCompleted ハンドラーと OnSendingRequest ハンドラーを実装して ClientContext オブジェクトを取得する
OnAuthenticationCompleted ハンドラーの実装は、認証のエラーに対して最初にチェックする必要があります。 何かエラーがあった場合は、エラー メッセージをユーザーに表示して終了するなど、エラーを適切に処理します。
エラーがない場合、ハンドラーは新しい DataServiceContext オブジェクトのインスタンスを作成し、 SendingRequest イベントのハンドラーを登録する必要があります。 その時点から、OData 呼び出し元のコードは、コンピューター上と同じように DataServiceContext オブジェクトに対してプログラムされます。
OnAuthenticationCompleted ハンドラーの実装の例を次に示します。
void OnAuthenticationCompleted(object sender, AuthenticationCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show(error);
return;
}
ODataAuthenticator oat = sender as ODataAuthenticator;
// Construct an OData context object.
contextObj = new DataServiceContext(oat.ResolvedUrl);
// Register the SendingRequest event handler.
contextObj.SendingRequest +=
new EventHandler<SendingRequestEventArgs>(OnSendingRequest);
// Your data retrieval logic goes here.
// For example, if there is a GetData method:
// contextObj.GetData();
}
OnSendingRequest ハンドラーが行う必要がある操作は、Request オブジェクトの Cookie コンテナーを、ODataAuthenticator オブジェクトの Cookie コンテナーに設定することです。 次に例を示します。
void OnSendingRequest(object sender, SendingRequestEventArgs e)
{
ODataAuthenticator oat = sender as ODataAuthenticator;
((HttpWebRequest)e.Request).CookieContainer = oat.CookieContainer;
}
高度な利用
ハードコーディングされたユーザー名/パスワード オプションを使用して、
Authenticatorオブジェクトを作成できます。 アプリのユーザーはユーザー名とパスワードの入力を求められません。また、ユーザーの認証にはハードコーディングされた資格情報が使用されます。public Authenticator(string userName, string password) public Authenticator(string userName, string password, string domain)同じコンストラクターを使用して、カスタム サインイン ページを作成できます。 分離コード ファイルから資格情報を渡すことで、カスタム サインイン ページを作成できます。
Authenticator at = new Authenticator(); at.AuthenticationMode = ClientAuthenticationMode.MicrosoftOnline;認証の種類を設定できます。 既定では基本認証が使用されます。
SharePoint Online に対する認証
SharePoint Online URL に対して認証するには、Authenticator オブジェクトの AuthenticationMode プロパティを MicrosoftOnline モードに設定します。 その他の手順は社内設置型の SharePoint URL の手順と同じです。
注:
ユーザー名とパスワードを SharePoint Online 用にハードコーディングすることはできません。 ユーザーはサインイン資格情報の入力を求められます。
フェデレーション認証
FederationAuthURI プロパティは 、ADFS 認証スキームの基本設定を渡すために使用されます。 ここで、ADFS は複数の認証ハンドラーを使用するように構成されています。
FederationAuthURI は、認証要求で必要な認証の種類を指定します。SharePoint Online 認証はフェデレーションで使用されます。 このパラメーターは、認証ハンドラーが構成されている順序によって確立された優先順位をオーバーライドできます。 認証ハンドラーの詳細については、「 認証ハンドラーの概要」を参照してください。
Authenticator auth = new Authenticator("domain\\\\name", "xyz");
auth.FederationPassiveAuthUri = "urn:oasis:names:tc:SAML:2.0:ac:classes:Password";
// Replace <SiteUrl> with valid value
ClientContext ctx = new ClientContext("SiteUrl");
ctx.Credentials = auth;
ctx.ExecuteQueryAsync(
(object sender, ClientRequestSucceededEventArgs args) =>
{
/* successful callback code */
},
(object sender, ClientRequestFailedEventArgs args) =>
{
/* failure callback code */
});
ADFS は省略可能なプロパティであり、Microsoft Office SharePoint Onlineで使用される場合にのみ有効です。 他の認証スキームで ADFS 認証を使用しても効果はありません。 Microsoft Office SharePoint Onlineでは、ADFS が設定されていない場合、既定のスキーム、つまりサーバーの基本設定が使用されます。
Cookie のキャッシュ
Authenticator クラスには、Cookie または資格情報またはその両方のキャッシュを有効および管理するために使用できるメンバーも含まれています。
Authenticator クラスのこれらのメンバーとその使用方法については、「SharePoint モバイル オブジェクト モデルの概要」を参照してください。