我正在尝试为中国地区的 Azure B2C 的注册/登录设置一个非常基本的自定义策略,我的问题是关于如何调试登录过程。
仔细按照 [1] 中的说明(并调整中国的 URL/租户 ID,下面有更多详细信息)后,我无法使用自定义策略 signup_signin 流程成功登录。尽管相同的凭据适用于开箱即用的用户流,但每次尝试都会导致“无效的用户名或密码”。但是,通过此自定义策略进行的用户注册确实可以正常工作。
我专门为中国改变的事情:
- 租户 ID(在所有文件中):
<yourtenant>.onmicrosoft.com
-><yourtenant>.partner.onmschina.cn
- 技术配置文件“login-NonInteractive”元数据属性 (TrustFrameworkBase.xml):
- 提供者名称:
https://sts.chinacloudapi.cn/
- 元数据:
https://login.chinacloudapi.cn/<numeric tenant id>/.well-known/openid-configuration
- 授权端点:
https://login.chinacloudapi.cn/<numeric tenant id>/oauth2/token
- 提供者名称:
- b2clogin 值(在适当的应用程序属性等中):尝试了
<yourtenant>.b2clogin.cn/<numeric tenant id>
和<yourtenant>.b2clogin.cn/<yourtenant>.partner.onmschina.cn
形式
我尝试过/仔细检查过的事情:
- 在非中国 Azure 帐户中分别遵循所有指示 -这按预期工作
- 循环通过 login.partner.microsoftonline.cn / login.chinacloudapi.cn / .b2clogin.cn / etc 的许多组合,用于各种身份验证端点
- 重新创建 IdentityExperienceFramework 和 ProxyIdentityExperienceFramework 应用程序
- 根据需要,应用程序分别属于 web 应用程序/本机类型
- 应用程序是在 AAD(不是 B2C)刀片的旧应用程序注册部分中创建的,但在 B2C 租户中(在 b2c-extensions-don't-modify-this-app 应用程序旁边)
- 作为全局管理员进行的所有门户操作
- 代理应用程序有权访问其他应用程序
- 权限已通过选择后的单独按钮单击“授予”
- 应用程序 ID 位于 TrustFrameworkExtensions 文件中的正确客户端/资源位置
- 应用 ID 实际上是应用 ID 而不是对象 ID
- 自定义策略文件以正确的 base/extensions/relyingParty 顺序上传
- App Insights 调试日志记录已打开 - 据我所知,Event:SELFASSERTED 步骤 Web.TPEngine.StateMachineHandlers.SelfAssertedMessageValidationHandler 返回 false,尽管处理程序结果的 statebag 属性包含似乎包含 ID 令牌的验证响应
我直接从 [2] 中观察到 LocalAccounts 文件的这种行为,只填充了模板值(即没有更改用户流的结构或任何东西,只是插入应用程序 ID、租户 ID 和中国 URL 替换)。这个问题 [3] 描述了我遇到的同样的问题,尽管那里列出的解决方案并没有解决我的问题。
达到这一步的学习曲线非常陡峭,我不确定下一步应该如何进一步调试。
有没有人在中国有任何使用 AADB2C 的经验或一般调试此类问题?
[1] https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-get-started-custom
[2] https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack