Active Directory およびクレームベース認証

クレームベース認証は、ホスト コンピューターに対してユーザーを認証する業界標準のセキュリティ プロトコルです。 クレームベース認証は一連の WS-* 標準で、パッシブ モード (WS-Federation が Dynamics 365 for Customer Engagement Web アプリケーションと共に使用されるとき) またはアクティブ モード (WS-Trust が Windows Communication Foundation (WCF) クライアントと共に使用される場合) のいずれかで、Security Assertion Markup Language (SAML) トークンの使用について説明します。 この認証は WCF と共に動作し、Dynamics 365 Server を使用している保護されたユーザー認証と通信チャンネルを提供します。 Dynamics 365 Customer Engagement (on-premises) のすべてのエディションでクレームベース認証がサポートされています。

クレームベース認証を行うには、サーバーで実行するセキュリティ トークン サービス (STS) を使用できるようになっている必要があります。 STS サーバーは Active Directory フェデレーション サービス (AD FS) V2、または正式な STS プロトコルを提供する任意のプラットフォームを基にすることができます。 詳細: TechNet: Dynamics 365 Customer Engagement (on-premises) 用 IFD を構成する

サポートされている認証シナリオ

Dynamics 365 Customer Engagement (on-premises) は展開の種類ごとに以下の認証シナリオをサポートします。

 

展開 認証モデル
Dynamics 365 for Customer Engagement (on-premises) クレームベースまたは Active Directory 認証
Dynamics 365 for Customer Engagement のインターネット接続展開 (IFD) クレームベースまたは Active Directory 認証

クレームベース認証のしくみ

ユーザー認証の要求は、Dynamics 365 for Customer Engagement またはカスタム アプリケーションから STS サーバーに送信されます。 STS サーバーはユーザーの認証が必要かどうかを判断し、必要と判断した場合はユーザー認証情報を含む署名され、暗号化された SAML トークンを発行します。 このトークンの存続期間は無限です。アプリケーションがトークンを使用する期間によって異なりますが、定期的に最新の状態に更新する必要があります。 これは、このトピックの後半で詳しく説明されています。

Active Directory 認証のしくみ

ユーザー認証の要求は Dynamics 365 Customer Engagement (on-premises) またはカスタム アプリケーションから Active Directory に送信されます。 WCF スタックはアプリケーションからの組織サービス呼び出しの認証プロセスを管理し、インターネット インフォメーション サービス (IIS) は Web アプリケーションの認証を管理します。

サポートされていない認証シナリオ

クライアント証明書の使用はサポートされていません。 IIS クライアント証明書を要求するように Dynamics 365 Customer Engagement Web サイトを構成する場合、SDK を使用してビルドしたどのアプリケーションでも認証が失敗します。

追加のサポートされていないプログラミング方法の詳細については、「サポートされていないカスタマイズ」を参照してください。

認証クラス

次の表は、SDK で使用できる主認証クラスの一覧を示し、それらのクラスをいつ使用するかを説明し、ほかの関連ドキュメントへのリンクを提供しています。

クラス 使用法 関連ドキュメント
IServiceConfiguration<TService>IServiceManagement<TService> すべての展開タイプ: オンプレミス/IFD、オンライン (Microsoft アカウントおよび Office 365/MOS*)

マルチスレッド アプリケーションの最良の選択
Dynamics 365 Customer Engagement Web サービスで Office 365 ユーザーを認証する

サンプル: Dynamics 365 Customer Engagement Web サービスでユーザーを認証する

サービス チャネル割り当てのパフォーマンスの改善
DiscoveryServiceProxyOrganizationServiceProxy すべての展開タイプ: オンプレミス/IFD、オンライン (Microsoft アカウントおよび Office 365/MOS*) クライアント プロキシ クラスを利用した認証

サービス チャネルの割り当て性能の向上
XRM ツール クラス すべての展開タイプ: オンプレミス/IFD、オンライン (Microsoft アカウントおよび Office 365/MOS*) XRM ツールを使用して Windows のクライアント アプリケーションを作成する
CrmServiceClient すべての展開タイプ: オンプレミス/IFD、オンライン (Microsoft アカウントおよび Office 365/MOS*) サンプル: Microsoft Dataverse を使った簡易接続クイックスタート

* Microsoft Online Services 環境

チップ

アプリケーションのシナリオに応じて、 Dynamics 365 Customer Engagement (on-premises) の任意の展開で.NET Framework クライアント アプリケーションを認証するために推奨される方法は、CrmServiceClient クラスを使用することです。

オンプレミス認証で ADFS を使用している場合は、ServiceClient クラスを使用しないでください。

クライアント プロキシ クラスを使用した認証

Dynamics 365 Customer Engagement (on-premises) Web サービスに対する認証の方法の 1 つは、作成するアプリケーションで OrganizationServiceProxy クラスと DiscoveryServiceProxy クラスを使用することです。 これらのクラスの 4 パラメーターのコンストラクターが Dynamics 365 for Customer Engagement の展開をサポートします。 これらのプロキシ クラスはクレーム認証または Active Directory 認証を自動的に処理し、WCF チャネル エンドポイントのリソース制限も管理します。

次のコードは、組織サービス プロキシのインスタンスの作成方法を示しています。

using (OrganizationServiceProxy _serviceProxy = new OrganizationServiceProxy(organizationUri, homeRealmUri, userCredentials, deviceCredentials))  

次のコードは、探索サービス プロキシのインスタンスの作成方法を示しています。

using (DiscoveryServiceProxy _discProxy = new DiscoveryServiceProxy(organizationUri, homeRealmUri, userCredentials, deviceCredentials))  

アプリケーションのサービス プロキシ インスタンスは、アプリケーションを終了する前に適切に破棄することが重要です。 using ステートメントを使用すると、スコープ外になったサービス プロキシに対して自動的に Dispose が呼び出され、サービス プロキシが適切に破棄されます。 ただし、アプリケーションのパフォーマンスを高めるには、サービス プロキシ インスタンスを破棄してアプリケーション コードの別の場所で必要になったときに再度割り当てるのではなく、サービス プロキシ インスタンスをアプリケーション セッション全体で使用できるように保持しておくことをお勧めします。 サービス チャネルの作成と認証には時間がかかるからです。 この場合は、サービス プロキシ インスタンスの処理が終了したら、アプリケーションを終了する前にそのプロキシに対する Dispose メソッドを直接呼び出す必要があります。

登録されているコンピューティング デバイスのデバイス資格情報は、Microsoft アカウント ID プロバイダーによる Dynamics 365 for Customer Engagement での認証時にのみ使用されます。 プロキシ コンストラクター パラメーターの設定方法を示すサンプル コードについては、「サンプル: 探索サービスへのアクセス」を参照してください。

重要

Dynamics 365 for Customer Engagement の設置型またはインターネットに接続する展開 (IFD) インストールでは、STS サーバーが使用可能な場合、クライアント プロキシ クラスでクレームベース認証が使用されます。 それ以外は、Active Directory 認証が使用されます。

コードで Dynamics 365 Customer Engagement (on-premises) の事前バインド エンティティ型を使用する場合、組織サービス プロキシのインスタンスを作成した後、Web サービス メソッドを呼び出す前に次のコード行を追加する必要があります。

_serviceProxy.EnableProxyTypes()  

重要

WCF では、ログオン資格情報が必要な場合にユーザーに対話形式で入力を求める機能をサポートしています。 この機能を有効にするには、ClientCredentials クラスの SupportInteractive プロパティを設定します。 これらの資格情報は、上記のコード スニペットの userCredentials パラメーターで使用されます。

Dynamics 365 Customer Engagement (on-premises) Web サービスに対する SDK 呼び出しを行うとき、SDK 呼び出しで実行される操作やエンティティ データの変更の実行元が、この WCF 機能によってコードとは無関係に変更されることがあります。

Dynamics 365 Customer Engagement (on-premises) では、Web サービス呼び出しで指定された資格情報が次のように処理されます。

  • 資格情報を Web サービス呼び出しで指定しない場合、使用する資格情報は WCF スタックで決まります。 この場合、SupportInteractive プロパティの値は自動的に false に設定されます。
    • 資格情報がコードで明示的に提供される場合、現在の SupportInteractive 値が WCF チャネル ファクトリに渡されます。 明示的に変更しない限り、SupportInteractive は既定で true に設定されます。
    • SupportInteractivetrue に設定されている場合、指定された資格情報に誤りがあると、WCF のダイアログ ボックスが表示されることがあります。 そのダイアログ ボックスにユーザーが資格情報を入力すると、アプリケーションで呼び出した Web サービス呼び出しで指定された情報の代わりに、その情報が使用されます。

チャネルの例外およびエラーの処理

コードでは以下の例外とエラーをキャッチする必要があります。 キャッチするその他の例外の一覧については、開発者ドキュメントの C# のサンプルを参照してください。

セキュリティ (SAML) トークンに関する追加情報

ユーザー認証時に使用される SAML トークンを以下に示します。

SAML トークンの内容

XML ベースの SAML 2.0 トークンには特定ユーザーに関する 1 つ以上のクレームを定義する ID が含まれています。 このトークンは ID プロバイダー (STS) サーバーと Dynamics 365 Customer Engagement (on-premises) の間で受け渡され、クレームベース認証に使用されます。 ID 内のクレームは以下のように定義されています。

クレーム 用途
ユニバーサル プリンシパル名 (UPN) 対象となる Dynamics 365 Server のドメイン\エイリアス形式のユーザーの ID が含まれます。
名前 認証されたユーザーが Dynamics 365 Customer Engagement (on-premises) の展開管理者でもある場合、この要求には対象とする Dynamics 365 Server のドメイン\エイリアス形式の展開管理者の ID も含まれます。 Windows Identity Foundation は、Name クレームを Identity.name プロパティにマップします。
その他のクレーム Dynamics 365 Customer Engagement (on-premises) では使用されません。

サポートされるセキュリティ トークンの種類

Dynamics 365 for Customer Engagement は、2 種類の SAML トークンをサポートします:

  • Web アプリケーション- Dynamics 365 Customer Engagement (on-premises) Web アプリケーションは STS からベアラー トークンを受け取ります。 このトークンには必要な情報の一部が不足しているため、WCF エンドポイントにアクセスする際のセキュリティ保護には Transport Layer Security (TLS) または Secure Sockets Layer (SSL) ベースの URL (https://) が使用されます。

  • SDK - カスタム アプリケーションは必要な情報を含む証明キーを持つアクティブ トークンを受け取ります。

セキュリティ トークンのライフサイクル

SecurityToken の存続期間は ValidFrom プロパティと ValidTo プロパティで指定されます。 アプリケーションの設計では、トークンが期限切れになる可能性を考慮する必要があります。その場合は、ExpiredSecurityTokenException が Dynamics 365 Customer Engagement (on-premises) Web サービスによってスローされて、アプリケーションの次のメッセージ要求が処理されます。

関連項目

チュートリアル: Active Directory で Dynamics 365 Customer Engagement (on-premises) を登録する
Microsoft Office 365 と Dynamics 365 Customer Engagement (on-premises) に接続する
ASPX Web ページまたは IFRAME からのシングル サインオンの実行
サンプル: Dynamics 365 Customer Engagement Web サービスでユーザーを認証する