如何在持久声明中使用声明解决程序?
How to use a claim resolver in Persisted claims?
我想在用户登录时将上次登录时间存储在扩展字段中。我创建了如下技术配置文件并从编排步骤调用它。我的问题是它没有解析 {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>
我做错了什么?
我终于能够使用声明转换来做到这一点。
根据 Microsoft 声明解析器,目前不能与持久声明一起使用。他们正在努力为更多技术配置文件类型启用此功能。
这里是详细的步骤。
第 1 步:首先添加两个声明
<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>
第一个是扩展属性,用于在AD中存储值。第二个是保存当前日期时间的临时变量。
第 2 步:添加新的索赔转换,这是在 CurrentTime
索赔
中获取当前数据时间 (utc) 所必需的
<ClaimsTransformation Id="GetSystemDateTime" TransformationMethod="GetCurrentDateTime">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="CurrentTime" TransformationClaimType="currentDateTime" />
</OutputClaims>
</ClaimsTransformation>
第 3 步:定义技术配置文件以更新 extension_LastLoginDate
属性
<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>
第 4 步:更新现有技术资料 AAD-UserReadUsingObjectId
。这是一个重要的步骤,您将在其中调用声明转换并在声明包中添加 CurrentTime
声明。我使用了 AAD-UserReadUsingObjectId
技术配置文件,但它可以是任何其他技术配置文件,只要确保已调用声明转换并将 CurrentTime
声明添加到声明包中即可。
<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>
第 5 步:最后,您可以在任何用户旅程
中从 OrchestrationStep
之一调用 Custom-TP-AAD-WriteLastLoginDateUsingObjectId
技术资料
<OrchestrationStep Order="5" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="WriteLastLogonTime" TechnicalProfileReferenceId="Custom-TP-AAD-WriteLastLoginDateUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>
我想在用户登录时将上次登录时间存储在扩展字段中。我创建了如下技术配置文件并从编排步骤调用它。我的问题是它没有解析 {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>
我做错了什么?
我终于能够使用声明转换来做到这一点。
根据 Microsoft 声明解析器,目前不能与持久声明一起使用。他们正在努力为更多技术配置文件类型启用此功能。
这里是详细的步骤。
第 1 步:首先添加两个声明
<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>
第一个是扩展属性,用于在AD中存储值。第二个是保存当前日期时间的临时变量。
第 2 步:添加新的索赔转换,这是在 CurrentTime
索赔
<ClaimsTransformation Id="GetSystemDateTime" TransformationMethod="GetCurrentDateTime">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="CurrentTime" TransformationClaimType="currentDateTime" />
</OutputClaims>
</ClaimsTransformation>
第 3 步:定义技术配置文件以更新 extension_LastLoginDate
属性
<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>
第 4 步:更新现有技术资料 AAD-UserReadUsingObjectId
。这是一个重要的步骤,您将在其中调用声明转换并在声明包中添加 CurrentTime
声明。我使用了 AAD-UserReadUsingObjectId
技术配置文件,但它可以是任何其他技术配置文件,只要确保已调用声明转换并将 CurrentTime
声明添加到声明包中即可。
<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>
第 5 步:最后,您可以在任何用户旅程
中从OrchestrationStep
之一调用 Custom-TP-AAD-WriteLastLoginDateUsingObjectId
技术资料
<OrchestrationStep Order="5" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="WriteLastLogonTime" TechnicalProfileReferenceId="Custom-TP-AAD-WriteLastLoginDateUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>