9

Azure AD アプリケーションで oauth client_credentials 付与が許可されないのはなぜですか?

Azure Graph API を使用したいのですが、まず oauth トークンが必要です。トークンを取得するために、Microsoft.IdentityModel.Clients.ActiveDirectory 別名 ADAL バージョン 1.0.3 (NuGet から) を使用しようとしています。

ClientCredential オブジェクトを取る AuthenticationContext.AcquireToken のオーバーロードを使用しています。(アプリではなくサービスを作成しているため、ユーザーにログインを促すオーバーロードは使用できません。)

さまざまなチュートリアル/サンプル ( ADAL - Server to Server Authenticationなど)で説明されているように、Azure AD Web アプリケーションを構成しました。

私のコードは次のようになります:

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 パラメーターが間違っていると思います。

4

4 に答える 4

2

次のリンクをご覧ください: https://azure.microsoft.com/en-gb/documentation/articles/resource-manager-net-sdk/

Active Directory Authentication Library の最新バージョンは AcquireToken メソッドをサポートしていません。代わりに、AcquireTokenAsync メソッドを使用する必要があります。

var result = await authenticationContext.AcquireTokenAsync(resource: "https://{domain}.onmicrosoft.com/{site-if applicable}", clientCredential: credential);
于 2016-07-11T13:34:37.933 に答える
1

私は同じ問題を抱えていましたが、Azure から (Azure Web サイト内で) コードを直接実行しただけでした。

「Microsoft.IdentityModel.Clients.ActiveDirectory」パッケージの「2.6.1-alpha」へのアップグレードを解決しました

于 2014-04-25T01:43:08.730 に答える
0

トランスレータの Azure バージョンは、もう一度変更されました。Oauth トークン リクエストは新しい URL を使用し、他のすべての手荷物ではなく、秘密鍵のみを必要とします。このページでは、それについて説明しています (ただし、PHP コードを使用しています): http://www.bradymoritz.com/php-code-for-bingmicrosoftazure-translator/

主な項目は次のとおりです。

  1. 空のリクエストを https://api.cognitive.microsoft.com/sts/v1.0/issueTokenに投稿します
  2. ヘッダー「Ocp-Apim-Subscription-Key:」を使用して秘密鍵を渡します。
  3. または、クエリ文字列パラメーターを使用するだけです: "Subscription-Key="

次に、戻り値の本文を実際のトークンとして取得します。これは、json 形式ではなく、本文全体です。

これは以前に使用された方法よりもはるかに簡単ですが、物事が再び変更されたことは間違いなく苦痛です.

于 2016-11-09T23:00:41.557 に答える