Я наконец смог сделать это с помощью преобразования претензий.
Согласно 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. Добавьте новое преобразование утверждений, это необходимо для получения текущего времени данных (utc) в 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: Наконец, вы можете вызвать Custom-TP-AAD-WriteLastLoginDateUsingObjectId
технический профиль одного из OrchestrationStep
в любом путешествии пользователя
<OrchestrationStep Order="5" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="WriteLastLogonTime" TechnicalProfileReferenceId="Custom-TP-AAD-WriteLastLoginDateUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>