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