AzureADアプリケーションでoauth client_credentialsの付与が許可されないのはなぜですか?
Azure Graph APIを使用したいのですが、最初にoauthトークンが必要です。トークンを取得するには、Microsoft.IdentityModel.Clients.ActiveDirectory、別名ADALバージョン1.0.3を使用しようとしています( NuGetから)。
ClientCredentialオブジェクトを受け取るAuthenticationContext.AcquireTokenのオーバーロードを使用しています。 (アプリではなくサービスを作成しているため、ユーザーにログインを求めるオーバーロードを使用できません。)
さまざまなチュートリアル/サンプルで説明されているようにAzureAD Webアプリケーションを構成しました(例: ADAL-サーバー間認証 )。
私のコードは次のようになります:
AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/thommmondago.onmicrosoft.com");
ClientCredential cc = new ClientCredential("41151135-61b8-40f4-aff7-8627e9eaf853", clientSecretKey);
AuthenticationResult result = ac.AcquireToken("https://graph.windows.net", cc);
AcquireToken
行は例外をスローします。
sts_token_request_failed: Token request to security token service failed. Check InnerException for more details
内部例外はWebExceptionであり、受信した応答はoauthエラー:
{ "error":"invalid_client",
"error_description":"ACS50012: Authentication failed."
"error_codes":[50012],
"timestamp":"2014-03-17 12:26:19Z",
"trace_id":"a4ee6702-e07b-40f7-8248-589e49e96a8d",
"correlation_id":"b304af2e-2748-4067-99d0-2d7e55b121cd" }
ADALをバイパスし、oauthエンドポイントでcurlを使用すると、同じエラーが発生します。
見つけたAzureアプリケーションの詳細を使用すると、コードが機能します ここ :
AuthenticationContext ac = new AuthenticationContext("https://login.windows.net/graphDir1.onmicrosoft.com");
ClientCredential cc = new ClientCredential("b3b1fc59-84b8-4400-a715-ea8a7e40f4fe", "FStnXT1QON84B5o38aEmFdlNhEnYtzJ91Gg/JH/Jxiw=");
AuthenticationResult result = ac.AcquireToken("https://graph.windows.net", cc);
だから、それは私のコードのエラーではありません。 Azure ADのエラーか、ClientCredentialパラメーターが間違っていると思います。
これはWindowsAzureのエラーであることが判明し、コードまたは構成に問題はありませんでした。
MicrosoftがAzureの問題を修正した後、新しいアプリケーションを作成する必要があり、それが機能し始めました。
Hi,
昨日終了する数日の時間範囲で作成されたアプリケーションでいくつかのエラーが発生しています。私たちはこれらのアプリケーションを修正し続けていますが、これがいつ行われるかについては良いetaがありません。ここでの影響についてお詫び申し上げます。
新しいアプリケーションを作成し、新しいクライアントIDで操作を再結合してみてください。
ありがとう
このリンクをご覧ください: https://Azure.Microsoft.com/en-gb/documentation/articles/resource-manager-net-sdk/
Active Directory認証ライブラリの最新バージョンはAcquireTokenメソッドをサポートしていません。代わりに、AcquireTokenAsyncメソッドを使用する必要があります。
var result = await authenticationContext.AcquireTokenAsync(resource: "https://{domain}.onmicrosoft.com/{site-if applicable}", clientCredential: credential);
同じ問題が発生していましたが、Azureから直接(Azure Webサイト内で)コードを実行するだけでした。
「Microsoft.IdentityModel.Clients.ActiveDirectory」パッケージを「2.6.1-alpha」にアップグレードすることを解決しました
Azureバージョンのトランスレータは状況をもう一度変更しました-Oauthトークンリクエストは新しいURLを使用し、他のすべての手荷物ではなく、秘密鍵のみを必要とします。このページではそれについて説明しています(ただし、 PHPコード): http://www.bradymoritz.com/php-code-for-bingmicrosoftazure-translator/
主な項目は次のとおりです。
次に、リターンの本文を実際のトークンとして取得します。これは、json形式ではなく、本文全体です。
これは以前に使用された方法よりもはるかに簡単ですが、状況が再び変わったことは間違いなく苦痛です。