2

Azure Active Directoryに対してOpenIdConnectを使用して承認トークンを要求することに問題があります。OpenIdを使用したトークンの取得Azure Active Directoryへの接続

私は、AuthenticationContext.AcquireTokenByAuthorizationCodeAsyncを使用して、私のADテナントに認証コードを渡す、さまざまなアプローチを試みました。

私は取得しています特定のエラーがある「AADSTS70002:エラーは、資格情報を検証しAADSTS50011:返信アドレス 『http://localhost:5000/api/home/indexは』ときreque 刺さ認証コード提供返信アドレス 『http://localhost:5000/signin-oidc』と一致しません。」

私は確信していないのは、ADが私の返信用URLがsignin-oidcだと思う理由です。 AuthorizationContextのインスタンス内に返信URLを "http://localhost:5000/api/home/index"に設定しました。ソースコードを以下に示します。私はそれを読んだ後に/問題になることができますが、私は私の返信のURLに表示されません。また、コード内の私の返信URLは、私がADのWeb API内に登録したものと同じです。

ご協力いただければ幸いです。私はAzure ADに対してOpenId Connectを使用する方法の多くの例を読んできましたが、それは非常に矛盾しているようです。

Stack Trace for requesting authorization t

Azure AD Reply URLs

// Configure the OWIN pipeline to use OpenIDConnect. 
     app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
     { 
      //AuthenticationScheme = "oidc", 
      Authority = authority, 
      ClientId = clientId, 
      Scope = { "openid profile email offline" }, 
      ResponseType = OpenIdConnectResponseType.CodeIdToken, 
      TokenValidationParameters = new TokenValidationParameters() 
      { 
       ValidateIssuer = false 
      }, 

      Events = new OpenIdConnectEvents 
      { 
       OnAuthorizationCodeReceived = async context => 
       { 
        var clientCred = new ClientCredential(clientId, clientSecret); 

        var tenantId = "xxxx.onmicrosoft.com"; 

        var resource = new Uri(string.Format(organizationHostName, "*")); 

        var authContext = new AuthenticationContext(aadInstance + tenantId); 

        var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(context.TokenEndpointRequest.Code, 
         new Uri(redirectUri), clientCred, "https://login.windows.net/xxxxxxx-xxxx-xxxx-xxxxxxxxxxx/oauth2/token"); 

        context.TokenEndpointRequest.RedirectUri = redirectUri; 
       }, 

       OnAuthenticationFailed = (context) => Task.FromResult(0) 
      }, 
     }); 
+0

ここでデバッグ中に私は気づいたいくつかの追加情報です。 AuthorizationCodeReceivedContextのプロパティには、2つのURIがあります。 1つはリダイレクト用のID、2つ目はOpenIdConnect.Code.Redirectです。私は2つの違いを理解しようとしています。 –

答えて

3

あなたは認証コードフローを使用してアクセストークンを要求すると、ユーザーがちょうどに署名したURIをリダイレクトし、それを通して同じを提供する必要があります。http://localhost:5000だろうと私想像する。

authContext.AcquireTokenByAuthorizationCodeAsyncの最後のパラメータは、アクセストークンを使用するAPIのリソースURIです。現在、トークンエンドポイントURLに設定されていますが、これは動作しません。 Azure AD Graph APIのトークンが必要な場合は、https://graph.windows.netに設定する必要があります。これは必要ありません

var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(context.TokenEndpointRequest.Code, 
        new Uri("http://localhost:5000/signin-oidc"), clientCred, "https://graph.windows.net"); 

だから、のようなものでなければなりません

context.TokenEndpointRequest.RedirectUri = redirectUri; 
+1

ありがとうございました。私は週末に同じ結論に達しました。私は今機能している。 –

関連する問題