Вызов пользовательского REST API при обновлении токена доступа - PullRequest
1 голос
/ 04 июля 2019

У меня есть пользовательская политика входа, которая вызывает пользовательский REST API, который извлекает некоторую информацию о пользователе из моей базы данных.

Эта информация должна обновляться время от времени, но я могу позволить себе обновлять ее раз в час.

Проблема в том, что мы не просим пользователя войти в систему каждый час.Вместо этого мы каждый день молча обновляем токен с помощью acquireTokenSilent

. Мне нужно каким-то образом перехватить acquireTokenSilent, чтобы он вызывал мой пользовательский REST API и вызывал дополнительные утверждения, как я это делаю впользовательская политика входа.

Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Настройка потока учетных данных пароля владельца ресурса в Azure Active Directory B2C с использованием настраиваемой политики В статье описывается, как можно реализовать пользовательскую поездку для обновления токена.

В частности:

  1. Эта поездка пользователя упоминается из мета-свойства RefreshTokenUserJourneyId технического профиля *1012* JwtIssuer .
<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="JwtIssuer">
      <Metadata>
        <!-- Point to the redeem refresh token user journey-->
        <Item Key="RefreshTokenUserJourneyId">ResourceOwnerPasswordCredentials-RedeemRefreshToken</Item>
      </Metadata>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>
Путешествие пользователя ResourceOwnerPasswordCredentials-RedeemRefreshToken проверяет, был ли токен обновления признан недействительным.
<UserJourney Id="ResourceOwnerPasswordCredentials-RedeemRefreshToken">
  <PreserveOriginalAssertion>false</PreserveOriginalAssertion>
  <OrchestrationSteps>
    <OrchestrationStep Order="1" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="RefreshTokenSetupExchange" TechnicalProfileReferenceId="SM-RefreshTokenReadAndSetup" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="CheckRefreshTokenDateFromAadExchange" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId-CheckRefreshTokenDate" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
  </OrchestrationSteps>
</UserJourney>

Вы можете добавить свой вызов API в эту поездку пользователя.

1 голос
/ 04 июля 2019

Проверьте ответ @Chris Padgett

Один из способов, которым вы можете достичь, как,

  1. Установите таймер для вызова через веб-интерфейс (я полагаю, у вас уже есть таймер для запроса на обновление без вывода сообщений)
  2. Выполните вызов API [Authorize] rest из JS, отправив маркер доступа пользователя
  3. Сделайте вызов в БД, чтобы извлечь данные из остальных API и сохранить их в локальных переменных вашего приложения SPA.
...