SUSI自定义策略登录注册流程令牌未返回用户声明问题求助
问题解决方案
该问题90%以上的情况是声明在后续输出环节未被配置为需要返回,按以下优先级排查修改即可:
1. 检查依赖方(RP)策略的输出声明配置
你自定义的登录/注册依赖方策略文件中,必须显式指定要返回的声明,哪怕前面技术配置文件已经读取到了声明,未在RP中声明的也不会随令牌返回。找到RP文件中的<OutputClaims>节点,添加对应声明:
<RelyingParty> <DefaultUserJourney ReferenceId="SignUpOrSignIn" /> <TechnicalProfile Id="PolicyProfile"> <OutputClaims> <!-- 已有声明保持不变,新增以下内容 --> <OutputClaim ClaimTypeReferenceId="displayName" /> <OutputClaim ClaimTypeReferenceId="givenName" /> <OutputClaim ClaimTypeReferenceId="surname" /> <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" /> </OutputClaims> </TechnicalProfile> </RelyingParty>
2. 检查JwtIssuer技术配置的输出声明
确认你的TrustFrameworkBase或Extensions文件中,Id为JwtIssuer的技术配置包含这些声明的输出配置,示例配置如下:
<TechnicalProfile Id="JwtIssuer"> <Metadata> <Item Key="tokenIssuanceClaimPattern">AuthorityWithTenantIdAsClaim</Item> </Metadata> <Protocol Name="OpenIdConnect" /> <OutputClaims> <!-- 确保需要返回的声明都在此处配置 --> <OutputClaim ClaimTypeReferenceId="issuer" PartnerClaimType="iss" /> <OutputClaim ClaimTypeReferenceId="displayName" /> <OutputClaim ClaimTypeReferenceId="givenName" /> <OutputClaim ClaimTypeReferenceId="surname" /> </OutputClaims> </TechnicalProfile>
3. 确认声明类型已正确定义
检查TrustFrameworkBase文件的<ClaimsSchema>节点,确认你需要的几个声明没有拼写错误、类型定义正确,示例正确定义如下:
<ClaimType Id="givenName"> <DisplayName>Given Name</DisplayName> <DataType>string</DataType> <UserHelpText>Your given name (first name).</UserHelpText> </ClaimType> <ClaimType Id="surname"> <DisplayName>Surname</DisplayName> <DataType>string</DataType> <UserHelpText>Your surname (last name).</UserHelpText> </ClaimType> <ClaimType Id="displayName"> <DisplayName>Display Name</DisplayName> <DataType>string</DataType> <UserHelpText>Your display name.</UserHelpText> </ClaimType>
4. 排查声明覆盖问题
如果以上配置都正确,检查你用户旅程中编排步骤4之前的所有步骤,是否存在将givenName、surname、displayName赋值为空或者覆盖的逻辑,比如是否有输出声明指定了DefaultValue且AlwaysUseDefaultValue设为了true。
内容的提问来源于stack exchange,提问作者Vanya Makhlinets
相关产品推荐
相关产品推荐

