this CRM Web APIプロジェクトを行っています。プロジェクトはDynamics CRMオンラインインスタンスにログインし、アカウントのリストを取得します。
ログインは正常に行われているようです。ただし、アカウントリストには以下のエラーが表示されます。
AADSTS65001:ユーザーまたは管理者は、ID 'xxxx-xxxxx-xxxx-xxx'のアプリケーションの使用に同意していません。このユーザーとリソースの対話型承認リクエストを送信します。トレースID:e3b360d6-39fb-4e61-87d9-26531f30fd7b相関ID:9b2cff0c-074e-44fe-a169-77c8061a7312タイムスタンプ:2016-10-18 10:12:49Z
何が問題ですか?
管理者は許可に同意する必要があります。パラメーターPrompt=admin_consent
を含むAzure ADに承認要求を行う必要があります。
ドキュメント here のように、Promptパラメーターには3つの値を指定できます:ログイン、同意、またはadmin_consent。
tenant-idをAzure ADテナントID /ドメイン名に置き換えるか、commonアプリがマルチテナントの場合。 app-client-idをアプリのクライアントIDに置き換えます。 encoded-reply-urlをアプリのURLエンコードされた返信URLに置き換えます。
必要なURLを作成する簡単な方法は、認証を通過し、Azure ADにアクセスしたときにアドレスバーでURLを取得することです。次に、&Prompt=admin_consent
をURLに追加します。
編集:Azureポータルの最新の更新では、ポータルから直接アクセス許可を付与する機能が追加されました。
新しいポータルでAzure Active Directoryにアクセスする場合は、そこにあるアプリの登録を見つけて、[必要なアクセス許可]ブレードの下のアクセス許可の付与をクリックします。
ADALを使用するネイティブアプリケーションでこのエラーが発生していました。すべての正しいアクセス許可を与えましたが、以前のサインインからトークンを既に受け取っていました。私の問題は、以前のトークンが古く、更新されたクレームが含まれていないことでした。私にとっての解決策は、以下のコードに従ってPromptBehavior.RefreshSessionを使用することでした。
AuthenticationResult result = await authenticationContext.AcquireTokenAsync(resourceId, clientId, redirectURI, new PlatformParameters(PromptBehavior.RefreshSession, false));
[〜#〜] msdn [〜#〜] により、PromptBehavior.RefreshSession "(webviewの表示を通じて)リソースの使用を再認証し、結果のアクセストークンに更新されたクレームが含まれていることを確認します。ログオンCookieを使用できます。ユーザーは再度資格情報の入力を求められることはなく、ログオンダイアログは自動的に閉じられます。」
私にとって、このエラーは突然発生したものであり、少数のユーザーのみに発生しました。
私の設定は、SPAアプリがAPIにアクセスしようとしたことです。 SPAアプリの登録からAPI権限を削除し、再度追加しました。出来た。
[〜#〜] all [〜#〜]許可を与えます。複数のドロップダウンがあります(スクリーンショットに表示されているようなもの)。
各ドロップダウン項目には、異なる資格情報を参照する複数のチェックボックスがあります。それぞれを確認し、あなたはオーケーです。