コンソール アプリケーションからDynamics 2016 CRM OData Web APIにアクセスするのに苦労しています。
Dynamics CRM 2016をインストールし、クレームベース認証で構成し、AD FS v3.0 を使用しています。
私の理解では、コンソール アプリ (または Web アプリ) は、Windows 統合認証 (つまり、NTML または Kerberos) を使用して、特別な処理なしで Web API にアクセスできる必要があります。または、有効にすると OAuth フローが機能するはずです。
Dynamics の「ページ」にアクセスする通常のユーザーの場合、認証は正常に機能しますが (AD FS ログイン ページへのリダイレクト)、OData API へのアクセスは機能しないようです (例: https://crm.domain.org/api/)。発見/v8.0/ ):
- ブラウザーで Windows ログイン プロンプトが表示され、有効な資格情報を入力すると常に HTTP 401 の無許可エラーが発生する
- ブラウザーで、ページにログオンした後にWeb API の URL に移動すると、Web APIにアクセスできます (つまり、いくつかの Cookie を設定する必要があり、既に暗黙的に承認されています)。
- コードから、特定の有効な資格情報 (または現在の資格情報) を持つ HttpClient を使用して、401 も取得します
私が試したこと:
- クレームベース認証を完全に無効にすると、HttpClient は正常に動作し、OData API にアクセスできるようになります
クレームベース認証を有効のままにし、PowerShell 経由でOAuth
Add-PSSnapin Microsoft.Crm.PowerShell ; $ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings; $ClaimsSettings.Enabled = $true ; Set-CrmSetting -Setting $ClaimsSettings ;
を有効にすると。Windows 統合認証はまだ機能しませんが、ベアラー認証を使用できるようになりました。このスニペットを使用してトークン生成用の OAuth エンドポイントを取得し、それを使用
AuthenticationContext.AcquireTokenAsync
してトークンを発行し、それをAuthorization
HTTP ヘッダーに渡すことができますが、何があっても、次のエラーが発生します。Bearer error=invalid_token, error_description =Error during token validation!, authorization_uri=https://our.adfs.domain.org/adfs/oauth2/authorize, resource_id=https://crm.domain.org/
何か不足していますか?それはおそらく構成の問題ですか?