问题描述
我们有一个基于 SocialAndLocalAccounts 入门包的自定义政策。
我们一直在基于此示例 HomeRealmDiscovery-Modern 添加来自 Home Realm discovery
的支持,以将使用第三方提供商的用户重定向到他们正确的登录页面 (IdP)
我们还添加了对 Domain Hints
的支持,以便为通过第三方身份提供商登录的用户完全跳过我们的登录页面。
该政策根据官方文档使用新发布的 Self-Served Password Reset。
有什么问题?
当用户进行“自助密码重置”时,B2C 会话处于损坏状态。如果用户被重定向回 B2C,则不会选择会话。
我们怎么说呢?用例是什么?
重现步骤:
2:用户输入本地帐户电子邮件 (Gmail),然后在下一个屏幕上单击“忘记密码”链接,该链接使用自助密码重置实现。
3:用户正确完成密码重置流程,最终进入“MFA”因子(短信代码)。
6:用户点击指向使用相同自定义策略的新/不同应用程序的链接。
预期结果:用户应该有一个有效的 B2C 会话,并且不会被提示再次登录,而是使用有效的 id-token
重定向到新应用程序的回调.
实际结果:用户被发送回新应用程序,回调 URL 中包含错误消息,并且由于错误重定向回 B2C 以重新登录。
错误信息:
AADB2C90051: No suitable claims providers were found.
Correlation ID: c014004a-d2da-4000-83e5-6d648f9acccc
Timestamp: 2021-06-16 07:17:16Z
重要提示:如果用户通过正常的登录流程(无需重置密码),一切正常。用户可以在不同的应用程序之间切换,B2C 会正确地获取会话,而不会抛出错误或提示新的登录。不同应用之间的 SSO 按预期工作。
这是完整的 TrustFrameworkExtention
文件,其中包含所有逻辑并从入门包的基本文件扩展而来:
TrustFrameworkExtention.xml
解决方法
试试这个:
- 在
CreateidentityProvidersCollectionLogic
中,将SM-Noop
更改为SM-DOMAIN
。 - 在
SM-DOMAIN
中添加:
<PersistedClaim ClaimTypeReferenceId="identityProviders" />