每当用户登录时,我都希望将上次登录时间存储在扩展字段中。我已经创建了如下所示的技术资料,并从业务流程步骤中进行了调用。我的问题是它不能解析{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>
我在做什么错了?
答案 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