Azure AD B2C输出email声明为数组 无需自定义策略添加输出声明方案
解答
关于是否必须上传完整自定义策略才能返回标准email声明
- 不需要。如果你当前使用的是Azure B2C预置的内置用户流(注册登录、密码重置、资料编辑这类官方预制策略),完全不用碰自定义策略:直接在Azure门户进入对应用户流的配置页,找到「应用程序声明」板块,勾选电子邮件地址选项后保存,策略就会自动返回符合OpenID规范的单值
email声明,以及兼容WS-Fed标准的http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress声明,不会再只返回数组类型的email_addresses字段。
配置生效后,本地账号场景会直接返回用户注册时的登录邮箱作为单值;第三方社交IdP登录场景,只要在对应IdP配置页完成邮箱声明的映射,也会正常返回单值邮箱。
关于是否有简化方案修改ReplyingParty配置、不用编辑整套5个策略文件
- 有两类低操作成本方案,完全不需要从零搭建整套自定义策略、也不用拆分修改全量策略包:
- 优先选内置用户流的声明勾选配置,全程在门户操作,不需要写任何XML代码,配置后1分钟左右生效,是成本最低的实现方式。
- 如果你因为业务需求必须使用自定义策略,也不需要下载、编辑、重新上传TrustFrameworkBase、TrustFrameworkExtensions、LocalAccounts、SocialAccounts、SignUpOrSignIn这整套5个策略文件,只需要写一个最小化的增量信赖方(RP)策略文件单独上传即可。这个文件只需要继承你租户内已经上传好的现有扩展策略,在输出声明节点加上需要的标准email声明就行,文件大小不到1KB,上传后直接用这个新RP策略的ID对接应用即可。
可直接复用的最小RP策略示例如下,替换占位符即可使用:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="替换为你的B2C租户全域名,比如yourtenant.onmicrosoft.com" PolicyId="B2C_1A_signup_signin_standard_email" PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_signup_signin_standard_email"> <BasePolicy> <TenantId>替换为你的B2C租户全域名,和上面保持一致</TenantId> <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId> <!-- 替换为你租户内已存在的扩展策略ID --> </BasePolicy> <RelyingParty> <DefaultUserJourney ReferenceId="SignUpOrSignIn"/> <!-- 替换为你实际使用的用户旅程ID,默认注册登录旅程用这个值即可 --> <TechnicalProfile Id="PolicyProfile"> <DisplayName>PolicyProfile</DisplayName> <Protocol Name="OpenIdConnect"/> <OutputClaims> <!-- 保留你原有需要返回的默认声明 --> <OutputClaim ClaimTypeReferenceId="displayName"/> <OutputClaim ClaimTypeReferenceId="givenName"/> <OutputClaim ClaimTypeReferenceId="surname"/> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/> <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}"/> <!-- 仅添加下面两行即可返回标准单值email声明 --> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email"/> <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"/> </OutputClaims> <SubjectNamingInfo ClaimType="sub"/> </TechnicalProfile> </RelyingParty> </TrustFrameworkPolicy>
只要你的租户之前已经上传过官方Starter Pack中的基础策略和扩展策略,这个单独的RP文件上传后即可直接使用,不需要修改任何已有策略文件,操作成本和配置内置用户流基本一致。
内容的提问来源于stack exchange,提问作者Arra
相关产品推荐
相关产品推荐

