OpenIDConnect连接到Azure AD

时间:2017-02-10 17:30:15

标签: c# asp.net-web-api2 identityserver3 openid-connect azure-active-directory

我正在使用OWIN OpenID Connect Middleware连接到Azure AD。我能够成功验证用户并重定向回回调端点。我在这里有点困惑,因为我只收到id_token&回复中code

    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
            {
                AuthenticationType = "Azure AD - TEST",
                Caption = "azure AD",
                SignInAsAuthenticationType = signInAsType,
                ClientId = "some guid",
                Authority = "https://sts.windows.net/idp",
                ResponseType = OpenIdConnectResponseTypes.CodeIdToken,
                RedirectUri = "https://localhost:44392/ExternalLogins/Callback/",
                AuthenticationMode = AuthenticationMode.Active,
            });

回调方法:

[HttpPost]
[Route("ExternalLogins/Callback")]
[AllowAnonymous]
public async Task<IHttpActionResult> ExternalLoginCallback()
{
    var content = await Request.Content.ReadAsStringAsync();
    // I could see the content is a string with id_token, code , state etc.

    //id_token is a JWT, so i can decode it and see the user claims and use them later
}

我的问题是:

  1. Azure AD是否仅用于验证用户身份?怎么样authorizatoin?
  2. 如果我想在身份验证后调用其他API,我该如何操作,因为我没有access_token
  3. 我想我可以与code交换access_token,但不确定我需要调用哪个Azure端点才能获得access_token
  4. AuthenticationMode.ActiveAuthenticationMode.Passive之间的区别是什么?

1 个答案:

答案 0 :(得分:0)

  1. Azure AD可以绝对授权用户并获取您的访问/刷新令牌。它支持所有oAuth 2.0和OIDC流程。
  2. 您需要access token拨打电话给api。假设您想要在MS Graph上调用/ get端点,您将access token填入http请求的正文中,并在其前面加上关键字Bearer ey...。 此外,您还需要进入Azure门户并配置要访问的委派权限。
  3. auth代码用于交换access_token。我建议查看this protocol doc,了解如何使用所有端点。简短的回答是POST到/ token端点。
  4. 对于SO答案,主动和被动之间的区别有点复杂,我建议阅读有关差异的this blog post
  5. 我只想补充一点,如果您想使用Azure AD查看一些示例代码,可以转到Azure AD Dev GuideAzure AD code samples on Github