使用Microsoft身份提供程序登录失败,与其他人一起使用
我有一个Azure AD B2C
租户,我希望使用SingIn and SignUp
政策
使用Angular2 SPA进行用户管理。
该政策已配置为三个identity providers
:
当我使用Azure门户中的Run Now
按钮运行此策略时,我会看到默认的“登录”对话框,我可以使用Google
或Email 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
设置适用于Google
和Email signup
,但不适用于Microsoft
?
答案 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帐户。
希望这有帮助!