如何在永久声明中使用声明解析器?

时间:2019-07-08 17:53:23

标签: azure-ad-b2c claims resolver

每当用户登录时,我都希望将上次登录时间存储在扩展字段中。我已经创建了如下所示的技术资料,并从业务流程步骤中进行了调用。我的问题是它不能解析{Context:DateTimeInUtc},而是将{Context:DateTimeInUtc}写入属性。

<TechnicalProfile Id="Custom-TP-AAD-UpdateLastLoginDate-UsingObjectId">
<Metadata>
<Item Key="Operation">Write</Item>
<Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
</Metadata>
<IncludeInSso>false</IncludeInSso>
<InputClaims>
<InputClaim ClaimTypeReferenceId="objectId" Required="true" />
</InputClaims>
<PersistedClaims>
<PersistedClaim ClaimTypeReferenceId="objectId" />
<PersistedClaim ClaimTypeReferenceId="extension_LastLoginDate" PartnerClaimType="{Context:DateTimeInUtc}" />
</PersistedClaims>
<IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我终于可以使用声明转换来做到这一点。
按照Microsoft声明,到目前为止,解析器无法与Persisted声明一起使用。他们正在努力为更多技术档案类型启用此功能。

这是执行此操作的详细步骤。

第1步:首先添加两个声明

.itertuple()

第一个是扩展属性,用于将值存储在AD中。第二个是用于保存当前日期时间的临时变量。

第2步:添加新的声明转换,这是获取 <ClaimType Id="extension_LastLoginDate"> <DisplayName>last time user logged in</DisplayName> <DataType>dateTime</DataType> <UserHelpText>last time user logged in</UserHelpText> </ClaimType> <ClaimType Id="CurrentTime"> <DisplayName>Current time</DisplayName> <DataType>dateTime</DataType> <UserHelpText>Current time</UserHelpText> </ClaimType> 声明中的当前数据时间(utc)所必需的

CurrentTime

第3步:定义技术资料以更新 <ClaimsTransformation Id="GetSystemDateTime" TransformationMethod="GetCurrentDateTime"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="CurrentTime" TransformationClaimType="currentDateTime" /> </OutputClaims> </ClaimsTransformation> 属性

extension_LastLoginDate

第4步:更新现有的技术资料 <TechnicalProfile Id="Custom-TP-AAD-WriteLastLoginDateUsingObjectId"> <Metadata> <Item Key="Operation">Write</Item> <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item> </Metadata> <IncludeInSso>false</IncludeInSso> <InputClaims> <InputClaim ClaimTypeReferenceId="objectId" Required="true" /> </InputClaims> <PersistedClaims> <PersistedClaim ClaimTypeReferenceId="objectId" /> <PersistedClaim ClaimTypeReferenceId="CurrentTime" PartnerClaimType="extension_LastLoginDate" /> </PersistedClaims> <IncludeTechnicalProfile ReferenceId="AAD-Common" /> </TechnicalProfile> 。这是重要的步骤,您将需要进行索赔转换并将AAD-UserReadUsingObjectId索赔添加到索赔包中。我使用过CurrentTime技术资料,但是可以确保使用其他任何技术资料,只要确保已调用索赔转换并将AAD-UserReadUsingObjectId索赔添加到索赔包中即可。

CurrentTime

第5步:最后,您可以在任何用户旅程中从 <TechnicalProfile Id="AAD-UserReadUsingObjectId"> <Metadata> <Item Key="Operation">Read</Item> <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item> </Metadata> <IncludeInSso>false</IncludeInSso> <InputClaims> <InputClaim ClaimTypeReferenceId="objectId" Required="true" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" /> <OutputClaim ClaimTypeReferenceId="displayName" /> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="CurrentTime" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="GetSystemDateTime" /> </OutputClaimsTransformations> <IncludeTechnicalProfile ReferenceId="AAD-Common" /> </TechnicalProfile> 之一调用Custom-TP-AAD-WriteLastLoginDateUsingObjectId技术资料

OrchestrationStep