azure-ad-b2c - 通过自定义策略 AAD 写入创建 Azure B2C 帐户将用户创建为已锁定
问题描述
我正在尝试通过即时迁移创建登录流程。通过 REST API 验证用户后,我需要通过 AAD 写入验证技术配置文件将用户写入目录。它工作正常,但它将帐户创建为“锁定” - 当我进入门户时,我看到“阻止登录 = YES”
可能是什么原因?我使用相同的技术配置文件,它在注册流程中运行良好
以下是我在本地登录技术配置文件中执行的技术配置文件
<TechnicalProfile Id="AAD-UserWriteUsingLogonEmail-Migrate">
<Metadata>
<Item Key="Operation">Write</Item>
<Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
</Metadata>
<IncludeInSso>false</IncludeInSso>
<InputClaims>
<InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" Required="true" />
</InputClaims>
<PersistedClaims>
<!-- Required claims -->
<PersistedClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" />
<PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password" />
<PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />
<PersistedClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration" />
<!-- Optional claims. -->
<PersistedClaim ClaimTypeReferenceId="givenName" />
<PersistedClaim ClaimTypeReferenceId="surname" />
<PersistedClaim ClaimTypeReferenceId="jobTitle" />
<PersistedClaim ClaimTypeReferenceId="extension_Phone" />
<PersistedClaim ClaimTypeReferenceId="extension_companyId" />
<PersistedClaim ClaimTypeReferenceId="extension_companyName" />
<PersistedClaim ClaimTypeReferenceId="extension_communicationOptin" />
<PersistedClaim ClaimTypeReferenceId="streetAddress" />
<PersistedClaim ClaimTypeReferenceId="city" />
<PersistedClaim ClaimTypeReferenceId="state" />
<PersistedClaim ClaimTypeReferenceId="postalCode" />
<PersistedClaim ClaimTypeReferenceId="country" />
</PersistedClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" />
<OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
<OutputClaim ClaimTypeReferenceId="userPrincipalName" />
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
<OutputClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" DefaultValue="true" />
</OutputClaims>
<IncludeTechnicalProfile ReferenceId="AAD-Common" />
<UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>
解决方案
...
<PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password" />
...
事实证明,“newpassword”声明不可用,因为我在自我断言登录步骤中收集的声明是“password”。添加“PartnerClaimType=password”并没有将“password”复制到“newpassword”声明中。
解决方案是简单地将“newpassword”重命名为“password”并且流程运行良好
<PersistedClaim ClaimTypeReferenceId="password" />
正如克里斯评论的那样,当密码不存在时,AAD Write 仍然创建用户,但将其创建为禁用 - 我认为这不应该发生,B2C 应该给出有意义的错误消息
推荐阅读
- java - 找不到资源/credentials.json
- influxdb - 如何在 InfluxDB 2.0 仪表板上获取查询变量?
- selenium-webdriver - 如何在 selenium 中访问 Firefox 扩展 url
- c# - 模拟 Unity InputSystem 鼠标事件
- javascript - SwiftUI:在 macOS 上与 WKWebView 进行 Javascript 通信
- xamarin - Xamarin Essentials Android 联系人:有没有办法确定哪个电话号码?例如:家庭、工作、手机?
- javascript - 在 json 响应中映射映射
- elasticsearch - 如何使用带有 Java API 的关键字分析器的弹性搜索匹配查询
- mongodb - 将 Mongo Db“无字段”转换为空值
- database - Laravel 使用范围过滤关系