Как использовать средство разрешения претензий в сохраняемых претензиях? - PullRequest
0 голосов
/ 08 июля 2019

Я хотел бы сохранить время последнего входа в систему в поле расширения, когда пользователь вошел в систему. Я создал технический профиль, как показано ниже, и вызвал его с этапа оркестровки.Моя проблема в том, что он не разрешает {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 голосов
/ 18 июля 2019

Я наконец смог сделать это с помощью преобразования претензий.
Согласно 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...