Identity Server 4 получает Id_Token_Hint при выходе - PullRequest
0 голосов
/ 09 апреля 2020

Я использую login.gov в asp. net основном приложении. Он настроен на Identity Server 4, что позволяет пользователям входить в систему с Azure AD, Google и Login.gov. Я могу войти / выйти со всеми ОДНАКО для loging.gov требуется звонок на следующий URL https://idp.int.identitysandbox.gov/openid_connect/logout? с параметрами строки запроса

id_token_hint post_logout_redirect_uri состояние

В процессе выхода из Identity Server, как я могу получить эти другие параметры?

В текущий момент, используя один из быстрых стартов он выполняет

        if (vm.TriggerExternalSignout)
        {
            // build a return URL so the upstream provider will redirect back
            // to us after the user has logged out. this allows us to then
            // complete our single sign-out processing.
            string url = Url.Action("Logout", new { logoutId = vm.LogoutId });

            // this triggers a redirect to the external provider for sign-out
            return SignOut(new AuthenticationProperties { RedirectUri = url }, vm.ExternalAuthenticationScheme);
        }

Я подключен в классе запуска для этого внешнего провайдера

options.Events = new OpenIdConnectEvents
{
  OnRedirectToIdentityProviderForSignOut = context =>
  {
      string tokenHint = context.ProtocolMessage.IdTokenHint;
      var postLogoutUri = context.Properties.RedirectUri;
      if (!string.IsNullOrEmpty(postLogoutUri))
      {
          if (postLogoutUri.StartsWith("/"))
          {
              // transform to absolute
              var request = context.Request;
              //postLogoutUri = request.Scheme + "://" + request.Host + request.PathBase + postLogoutUri;
              postLogoutUri = request.Scheme + "://" + request.Host + postLogoutUri;
          }
      }

      var logoutUri = $"{appConfig.LoginGov.Domain}/openid_connect/logout?id_token_hint={tokenHint}&post_logout_redirect_uri={postLogoutUri}&state={state}";

      context.Response.Redirect(logoutUri);
      context.HandleResponse();
      return Task.CompletedTask;
  }
};

Это выполняется, но я не могу перехватить id_token_hint и параметры состояния. Идеи?

Я подумал, что смогу перехватить в методе Logout и отправить в качестве параметра аутентификации, но я также не могу перехватить его там.

return SignOut(new AuthenticationProperties { RedirectUri = url }, vm.ExternalAuthenticationScheme);

1 Ответ

0 голосов
/ 14 апреля 2020

См. Эту документацию: https://identityserver4.readthedocs.io/en/release/endpoints/endsession.html?highlight=id_token_hint

Когда пользователь вошел в систему, сервер идентификации отправляет id_token, то есть id_token_hint . если id_token_hint действителен, он показывает страницу подтверждения выхода из системы. если endsession имеет правильный post_logout_redirect_uri , то он напрямую выходит из системы пользователя и перенаправляет обратно на post_logout_redirect_uri с параметром состояния, отправленным в запросе endsession.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...