Azure AD B2C租户迁移时获取第三方域名用户Token报AADSTS50034怎么解决?
问题根因
你遇到的AADSTS50034报错核心原因是两类用户的身份存储属性存在差异:
- @oldtenant.onmicrosoft.com后缀的用户属于普通AAD用户,用户名与
userPrincipalName(UPN)属性完全一致,用默认ROPC流请求时可以正常匹配到用户。 - @otherdomain.com后缀的是B2C本地账户,对外展示的登录邮箱存储在
signInNames属性中,其实际UPN为系统自动生成的乱码+@oldtenant.onmicrosoft.com格式,你直接用用户输入的自定义域名邮箱作为username参数调用普通AAD令牌端点时,系统无法匹配到对应用户。
解决方案
1. 替换令牌请求端点
不要使用普通Azure AD的ROPC端点,改用B2C专属的ROPC用户流端点:
- 正确的端点格式为:
https://oldtenant.b2clogin.com/oldtenant.onmicrosoft.com/<你的ROPC用户流名称>/oauth2/v2.0/token - 该端点会自动匹配用户
signInNames属性中存储的登录邮箱,不需要手动查询用户实际UPN。
2. 校验旧租户配置
- 确认
otherdomain.com域名已经在旧B2C租户完成域名验证,状态为已启用。 - 检查你在旧租户注册的应用权限,确保已授予
Directory.Read.All的应用级权限且完成管理员同意,不要使用委托权限。 - 确认ROPC用户流已在旧租户中创建并发布,允许所有类型的本地账户登录。
3. 备选兼容方案
如果无法调整ROPC流配置,可以先通过Microsoft Graph查询用户实际UPN再请求令牌:
- 先使用应用身份调用Graph接口,通过用户输入的邮箱查询对应用户的实际UPN,查询筛选逻辑为:
identities/any(c:c/issuerAssignedId eq '{用户输入的邮箱}' and c/issuer eq 'oldtenant.onmicrosoft.com') - 将查询返回的UPN作为
username参数请求令牌,即可正常获取用户凭据校验结果。
内容的提问来源于stack exchange,提问作者C. Fabiani
相关产品推荐
相关产品推荐

