使用Microsoft身份提供程序登录失败,适用于其他提供商

时间:2018-03-14 16:46:03

标签: azure-active-directory azure-ad-b2c

使用Microsoft身份提供程序登录失败,与其他人一起使用

我有一个Azure AD B2C租户,我希望使用SingIn and SignUp政策 使用Angular2 SPA进行用户管理。

该政策已配置为三个identity providers

  • Google
  • Microsoft
  • 电子邮件注册

当我使用Azure门户中的Run Now按钮运行此策略时,我会看到默认的“登录”对话框,我可以使用GoogleEmail signin登录。 (我的意思是说我会按照我的预期重新定向到我的应用的重定向页面。)但是,当我尝试使用Microsoft登录时 提供者,我最终在一个错误页面,其中包含以下地址:

https://login.live.com/err.srf?lc=1033#error=invalid_request&error_description=The+provided+value+for+the+input+parameter+'redirect_uri'+is+not+valid.+The+expected+value+is+'https://login.live.com/oauth20_desktop.srf'+or+a+URL+which+matches+the+redirect+URI+registered+for+this+client+application.&state=StateProperties%3deyJTSUQiOiJ4LW1zLWNwaW0tcmM6NDcyMmQyNjItOTk1Yi00YTJlLWFmNWUtODkwNDgyODlhMzM0IiwiVElEIjoiM2Y2ZDVmNjAtMDdiNC00ZDA3LWEyZDItN2U3YWQwOWRhOGQ5In0

我发现问题与无效的redirect_uri有关。但我认为redirect_uri是我配置的所有身份提供者共享的应用程序级设置。为什么我的redirect_uri设置适用于GoogleEmail signup,但不适用于Microsoft

2 个答案:

答案 0 :(得分:4)

您必须使用正确的重定向网址配置Microsoft应用程序。

documentation中所述:

  

在Redirect URIs字段中输入https://login.microsoftonline.com/te/ {tenant} / oauth2 / authresp。将{tenant}替换为您的租户名称(例如,contosob2c.onmicrosoft.com)。

为什么你必须这样做:(由Chris Padgett提供)

  

Azure AD B2C门户中配置的重定向URI表示客户端应用程序的回复地址。这样Azure AD B2C就可以将ID令牌返回给您的客户端应用程序。应用程序注册门户中配置的重定向URI表示Azure AD B2C租户的回复地址。这样,Microsoft帐户身份提供程序就可以将安全令牌返回给您的Azure AD B2C租户。

因此,您的应用程序正在将身份验证联合到Azure AD B2C。 B2C然后进一步联合到Microsoft帐户身份提供商。 因此,当用户使用Microsoft帐户登录时,会使用令牌将其发送回B2C,B2C会对其进行验证。 如果一切正常,他们将登录B2C并发回您的应用程序。 所以从MSA身份提供者的角度来看,B2C就是客户端。 因此,重定向网址必须指向B2C。

答案 1 :(得分:1)

如文档所述,您应在“重定向URI”字段中输入https://login.microsoftonline.com/te/{tenant}/oauth2/authresp

  

但我认为redirect_uri是共享的应用程序级别设置   由我配置的所有身份证明者。为什么我的   redirect_uri设置Google和电子邮件注册工作,但不是   微软?

你是对的,redirect_uri是一个应用级别的sttings。它应该在所有IDP重定向URI中相同。但是这个Redirec URI是由Azure设置的。不是你的申请。 这意味着您可以使用其他IDP使用AAD B2C登录您的应用,而不是直接登录您的应用。因此,redirect_uris必须是https://login.microsoftonline.com/te/{tenant}/oauth2/authresp,而不是应用程序本身的redirect_uri

URI不等于网址。重定向URI只是Azure AD将在OAuth 2.0请求中重定向用户代理的唯一标识符。它不是重定向URL,Azure AD身份验证端点https://login.microsoftonline.com/使用重定向URI来检查应该在哪里进行响应。同样,它可以与作为端点的URL相同。我想这应该是一样的。

总结,您需要为所有IDP使用唯一的重定向URI https://login.microsoftonline.com/te/{tenant}/oauth2/authresp,而不仅仅是Microsoft帐户。

希望这有帮助!