Azure AD B2C 本地账户登录REST API提示Email is mandatory错误
问题触发原因
- 你所配置的REST技术概要
REST-AuthB2CSignIn的输入声明要求传入名为email的字段,但Azure AD B2C本地账号登录流默认不会生成名为email的声明,仅会生成signInName、signInNames.emailAddress两个存储用户登录邮箱的声明。 - 第三方身份提供商登录时,平台会默认将IdP返回的邮箱字段映射为
email声明,因此第三方登录流程可以正常运行,本地登录时email声明为空,触发REST API的入参非空校验,抛出Validation error: Email is mandatory报错。
解决方案
修改REST-AuthB2CSignIn技术概要的InputClaims节点,将本地登录流的邮箱声明映射为传给REST接口的email参数,修改后的输入声明示例如下:
<InputClaims> <!-- Claims sent to your REST API --> <InputClaim ClaimTypeReferenceId="objectId" /> <!-- 优先取第三方登录的email声明,不存在则取本地登录的signInNames.emailAddress声明,映射为接口入参email --> <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" DefaultValue="{signInNames.emailAddress}" AlwaysUseDefaultValue="true" /> <InputClaim ClaimTypeReferenceId="displayName" /> <InputClaim ClaimTypeReferenceId="givenName" /> <InputClaim ClaimTypeReferenceId="surname" /> </InputClaims>
也可以直接将本地邮箱声明直接映射为接口入参:
<InputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
修改后重新上传自定义策略即可生效。
内容的提问来源于stack exchange,提问作者basquiatraphaeu
相关产品推荐
相关产品推荐

