通过ClaimsTransformations为声明分配默认值的推荐简便方法是什么?
解决ClaimsTransformations设置声明默认值的架构验证错误问题
首先得点明你踩的坑:你用CopyClaim来设置默认值是行不通的——这个转换方法的设计目的是复制已存在的声明,它的OutputClaim节点根本不支持DefaultValue和AlwaysUseDefaultValue这两个属性,这就是你遇到架构验证错误的核心原因。
针对你的需求(用户注册完成必填信息后,给extension_isProfileComplete声明赋值true),推荐两种更简便且符合规范的实现方式,完全不需要单独创建TechnicalProfile:
1. 强制设置声明值(无论原有声明是否存在)
如果不管这个声明之前有没有值,都要强制覆盖为true,直接用SetClaim转换方法:
<ClaimsTransformation Id="ProfileIsCompleted" TransformationMethod="SetClaim"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="extension_isProfileComplete" DefaultValue="true" AlwaysUseDefaultValue="true" TransformationClaimType="outputClaim"/> </OutputClaims> </ClaimsTransformation>
2. 仅当声明不存在时设置默认值
如果希望只有当extension_isProfileComplete声明不存在的时候才赋值true,就用SetClaimIfMissing方法:
<ClaimsTransformation Id="ProfileIsCompleted" TransformationMethod="SetClaimIfMissing"> <InputClaims> <InputClaim ClaimTypeReferenceId="extension_isProfileComplete" TransformationClaimType="inputClaim"/> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="extension_isProfileComplete" DefaultValue="true" TransformationClaimType="outputClaim"/> </OutputClaims> </ClaimsTransformation>
最后一步:关联到注册流程
把这个ClaimsTransformation加到你注册页面对应的TechnicalProfile的<OutputClaimsTransformations>节点里就行,比如:
<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail"> <!-- 其他配置 --> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="ProfileIsCompleted"/> </OutputClaimsTransformations> </TechnicalProfile>
这样用户完成必填信息提交后,声明就会被自动设置为你想要的值,完全不需要额外的TechnicalProfile,简洁又合规。
内容的提问来源于stack exchange,提问作者basquiatraphaeu
相关产品推荐
相关产品推荐

