Web サービスでユーザーを認証する
公開日: 2017年1月
対象: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online
Microsoft Dynamics 365 の外部クライアント認証機能を使用して、Windows 8 のデスクトップ向けのほかに、タブレット PC および電話などのモバイル デバイス向けのクライアント アプリケーションを作成できます。 この機能は、非 .NET アプリケーションでも使用できます。
このトピックの内容
認証の概要
テクノロジの依存関係
セキュリティ
ユーザー ログインおよびアプリケーション登録
クライアント アプリケーション
OAuth 認証エンドポイント
OAuth エンドポイント URL の検出
OAuth リソースを指定する
認証の概要
.NET Framework 上に構築されないアプリケーションを含む、最近のアプリケーションおよびモバイル アプリケーションを作成する開発者は、組織の Web サービスの SOAP および OData エンドポイントによって、Microsoft Dynamics 365 のビジネス データにアクセスできます。 この Web サービスは、OAuth 2.0 プロトコル の特定の認証機能をサポートします。
次の一覧には、最近のモバイル アプリケーション認証でサポートされている内容を説明します。
HTTP 承認ヘッダーでの JSON Web トークンの使用
外部アプリケーション (ブラウザー以外) による OData サービスの認証
外部アプリケーション (ブラウザー以外) による Organization.svc/web (SOAP) サービスの認証
テクノロジの依存関係
次のテクノロジが、Microsoft Dynamics 365OData および SOAP Web サービス エンドポイントで認証する、外部クライアント アプリケーションを開発して実行するために必要です。
クレーム構成が設置型展開に必要です。
TechNet: Windows Server 2012 R2 上の AD FS。
次のテクノロジは、Microsoft Dynamics 365OData および SOAP Web サービス エンドポイントで認証する、外部クライアント アプリケーションを開発して実行するためのオプションです。
Microsoft Azure の Active Directory 認証ライブラリ (ADAL)
セキュリティ
次のセキュリティ情報がこの認証機能に適用されます。
認証トークンは、保護されたストレージ内のデバイスに格納されます。 Windows オペレーティング システムでは、Windows Credential Manager が使用されます。
この機能は、HTTP 要求の Transport Layer Security (TLS) または Secure Sockets Layer (SSL) を使用します。
ユーザー ログインおよびアプリケーション登録
次の情報は、ユーザー ログインとアプリケーション登録に関するものです。
Microsoft Azure の Active Directory 認証ライブラリ (ADAL) のユーザー サインインは、Web ブラウザーのコンテキストによって処理されます。
アプリケーションの登録は、Dynamics 365 (オンライン) 展開用 Azure Active Directory、および設置型または インターネットに接続する展開 (IFD) 用 Active Directory フェデレーション サービス (AD FS) を介して管理されます。Microsoft Azure 管理ポータルまたは API を使用して、アプリケーションを Dynamics 365 (オンライン) に登録できます。
クライアント アプリケーション
外部クライアント アプリケーションが実行できる操作の範囲は、次の一覧にまとめられています。
OData エンドポイントを使用するとき、作成、取得、更新、および削除の操作がサポートされます。 メッセージ実行またはメタデータ検索はサポートされません。
モダンおよびモバイル アプリケーションの SOAP エンドポイント (Organization.svc/web) を使用するとき、完全な Web サービス機能セットへのアクセスが利用できます。
Web サービスを呼び出すクライアント コードを作成する際に、サービス呼び出しの前にトークンを ADAL に要求することをお勧めします。 それにより、ADAL は、アクセス トークンのキャッシュ済みインスタンスを再利用するか、リフレッシュ トークンを使用して新しいインスタンスを要求するか、ユーザーにサインインを求めるかを判断します。
OAuth エンドポイント URL の検出
実行時に Web サービス認証権限を検索する機能は、権限取得の代替方法として提供され、アプリケーションまたは構成ファイル内の OAuth プロバイダー URLs のハードコーディングと比較されます。
検索プロセスは、未認証 HTTP 要求を “Bearer” という単語を Authorization ヘッダーに付け、テナント組織の SOAP エンドポイントの URL を要求メッセージとして送信することにより、開始します。
GET /XRMServices/2011/Organization.svc HTTP/1.1 Host: <org>.crm.dynamics.com Authorization: Bearer
注意
ベアラー チャレンジは、現在は、オプションになりました。 "GET" を認証ヘッダーなしで実行しても結果は同じです。
401 エラーは authorization_uri パラメーターを含む応答で返されます。 そのパラメーターの値は権限 URL です。
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer authorization_uri=URI
権限検索機能は、SdkClientVersion プロパティがテナント組織の SOAP エンドポイントの URL に存在する場合にのみ、SOAP クライアントで使用できます。 例の URL を以下に示します。
https://contoso.crm.dynamics.com/XRMServices/2011/Organization.svc/web?SdkClientVersion=6.1.0.533;
SdkClientVersion 値は、少なくとも 1 つの小数点があり、6.0.0002.0000 以上のバージョン番号になります。SdkClientVersion プロパティ値を、クライアント アプリケーションにリンクされた SDK アセンブリの製品ビルド バージョンに設定することをお勧めします。
次のコード例は、権限 URL の取得方法を示しています。 サンプル コードが、NuGet.org から取得できる、Microsoft Azure の Active Directory 認証ライブラリ (ADAL) を使用することに注意してください。 また、Android および iOS 用の、このライブラリのオープン ソース バージョンもあります。
/// <summary>
/// Discover the authentication authority.
/// </summary>
/// <param name="serviceUrl">The URL of the organization's SOAP endpoint. </param>
/// <returns>The authority URL.</returns>
/// <remarks>The service URL must contain the SdkClient property.</remarks>
/// <example>https://contoso.crm.dynamics.com/XRMServices/2011/Organization.svc/web?SdkClientVersion=6.1.0.533;</example>
public static string DiscoveryAuthority(Uri serviceUrl)
{
// Use AuthenticationParameters to send a request to the organization's endpoint and
// receive tenant information in the 401 challenge.
Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationParameters parameters = null;
HttpWebResponse response = null;
try
{
// Create a web request where the authorization header contains the word "Bearer".
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
// The response is to be encoded.
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
response = (HttpWebResponse)httpWebRequest.GetResponse();
}
catch (WebException ex)
{
response = (HttpWebResponse)ex.Response;
// A 401 error should be returned. Extract any parameters from the response.
// The response should contain an authorization_uri parameter.
parameters = Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationParameters.
CreateFromResponseAuthenticateHeader((response.Headers)["WWW-Authenticate"]);
}
finally
{
if (response != null)
response.Dispose();
}
// Return the authority URL.
return parameters.Authority;
}
OAuth 認証エンドポイント
OAuth 検索を使用する代替メソッドは、有名な OAuth 認証エンドポイントを使用することです。Microsoft Dynamics 365 (オンラインおよび設置型) Web サービスで認証するアプリケーションを記述するときは、次の表に示すように、認証コードで、OAuth プロバイダーの URLs を使用する必要があります。
展開 |
URL |
---|---|
Microsoft Dynamics 365 (オンライン) |
HYPERLINK "https://login.windows.net/common/oauth2/authorize" https://login.windows.net/common/oauth2/authorize (マルチテナント) https://login.windows.net/<tenant ID>/oauth2/authorize (単一テナント) |
Microsoft Dynamics 365 (設置型/IFD) |
https://<serverFQDNaddress>/adfs/ls |
セキュリティ トークン サービス (STS)URL で、IFD サーバーのアドレス、たとえば contoso.com を代用します。 表示の STS URL は、AD FS の既定のインストール用です。 既定以外のインストールでは、別の URL を使用できます。 同様に、指示されている場所でテナント ID の代替となります。
承認エンドポイントは将来のある時点に変化するので、OAuth 検索を常に Dynamics 365 (オンライン) と共に使用することをお勧めします。
OAuth リソースを指定する
OAuth 認証コード フローを使用して Microsoft AzureActive Directory で認証するとき、目的のリソースの値を提供する必要があります。https://contoso.crm.dynamics.comなどのルート組織 Web アドレスは、OAuth 認証エンドポイントのコールで、「リソース」クエリ文字列パラメーターとして使用する必要があります。
// Obtain an authentication token to access the web service.
String resource = “https://contoso.crm.dynamics.com”;
_authenticationContext = new AuthenticationContext(_oauthUrl, false );
AuthenticationResult result = await _authenticationContext.AcquireTokenAsync( resource, clientID );
詳細:サンプル: Windows 8 デスクトップ modern OData アプリ
関連項目
モバイル アプリやモダン アプリを作成する
チュートリアル: Active Directory に Dynamics 365 アプリを登録する
Microsoft Dynamics 365 でユーザーを認証する
ブログ: Azure AD 開発者プレビューの新機能の紹介: Azure 認証ライブラリ
Azure Active Directory を使用するサーバー側 CRM 認証
Microsoft Dynamics 365
© 2017 Microsoft. All rights reserved. 著作権