2016-05-30 8 views
24

ダイナミクス2016 CRM OData Web APIにコンソールアプリケーションからアクセスするのに苦労しています。ダイナミックCRM 2016 Web APIにアクセスするとき

我々はDynamics CRMの2016、インストールクレームベース認証で構成され、AD FSのバージョン3.0を使用しています。

コンソールアプリケーション(またはWebアプリケーション)は、Windows統合認証(NTMLまたはKerberosなど)を使用して特別な処理を行わずにWeb APIにアクセスできるようにする必要があります。 。 Dynamicsの「ページ」をアクセスして、通常のユーザーのために

、認証が正常に動作します(ページのAD FSログへのリダイレクト)が、ODataのAPIにアクセスする(例えば:https://crm.domain.org/api/discovery/v8.0/を):動作していないよう

  • ブラウザで私はWindowsのログインプロンプトが表示され、有効な資格情報を入力すると、HTTP 401の不正なエラーが発生する
  • ブラウザーで、のページにログオンした後にWeb API URL に移動すると、 Web APIにアクセスする(つまり、いくつかのクッキーを設定する必要があり、暗黙のうちに許可されている)
  • 0コードから
  • 、特定の有効な認証情報(または現在の資格情報)とのHttpClientを使用して、私はまた、私が試みた401件の

観光得る:

  • Iが完全クレームベース認証を無効場合はクレームベースの認証を有効にしておくと、HttpClientは正常に動作し、OData APIにアクセスできます。
  • OAuthをPowerShell Add-PSSnapin Microsoft.Crm.PowerShell ; $ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings; $ClaimsSettings.Enabled = $true ; Set-CrmSetting -Setting $ClaimsSettings ;でアクティブにすると、

    Windows統合認証はまだ動作しませんが、ベアラ認証を使用できるようになりました。私は、トークン生成のためのOAuthエンドポイントを取得し、トークンを発行するAuthenticationContext.AcquireTokenAsyncを使用して、Authorization HTTPヘッダにそれを渡すためにthis snippetを使用することができます...が、その後、どんな、私はこのエラーを取得していない:

    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/

私に何かが不足していますか?おそらく設定上の問題でしょうか?

+0

ダイナミクスCRMコミュニティフォーラムに質問を投稿しました。ちょうどhttps://community.dynamics.com/crm/f/117/t/201151 – tsimbalar

+0

でこれを解決できましたか? –

+0

ちょうどそのパスをあきらめて、 "推奨される" Web APIの代わりに "陳腐化する途中で" Dynamics SDKを使用してしまいました... – tsimbalar

答えて

7

ダイナミクスコミュニティフォーラムのthis answerから、apiは必要なパラメータとヘッダーについて非常に厳しいようです。要求を行うときは、Cache-Control: no-cacheContent-Type: application/x-www-form-urlencodedヘッダーが設定されていることを確認してください。 (多くの人々が実際に彼らは直接トークンを置くことができると思ったので、注目に値する)あなたはBearer: TOKENの形でAuthorizationヘッダーを設定する必要があります取得したトークンとAPIにアクセスする後続の要求に

OData-Version: 4.0Cache-Control: no-cacheAccept: application/jsonもあります。

さまざまなOAuth endpointsと以前にリンクされた回答を見ると、私は許可URIが正しいもの(例えばhttps://login.windows.net)であるとは確信していませんので、正しいことを確認してください。また、OAuthエンドポイントのURLを使用して、このルートが401で応答しても、有効なURLを返すWWW-Authenticateヘッダーを使用する必要があることも記載されています。this exampleを見たことがありますが、 authフローと、リソースとクライアントIDを渡すAcquireTokenAsyncを使用してトークンを取得する方法を示します。私は更新されたページも見ているかもしれませんが、あなたの場合は関係ありません。

指定したリソースIDが正しいかどうかを確認したい場合は、裸のものではなくhttps://crm3.domain.org/またはhttps://crm4.domain.org/という形式で指定する必要があると報告されている人もいます。


ドメイン名の代わりにIPが動作するということについては、@ lが言ったところで、設定上の問題である可能性もあります。証明書の問題である可能性があります。証明書の問題は正しく検証されていないか、信頼できないため、適切なメッセージではない場合でもエラーが表示されます。また、443ポートがファイアウォールを介して許可されていることを確認してください。

面白いpost著者は、AD FS管理コンソールのForm Authentication設定が必要であると説明しています(これはCRM 2013ですが、まだ関連している可能性があります)。

関連する問題