Страница входа в закладки с одноразовым

Я пытаюсь интегрировать веб-клиент MVC4 с IdentityServer с использованием промежуточного программного обеспечения Microsoft OWIN OIDC аутентификация v4.0.0. При запросе токена ID из конечной точки авторизации необходимо указать одноразовый номер, а обслуживаемая страница входа в систему имеет одноразовый номер в строке запроса. Если пользователь добавляет это в закладки и использует его для входа в систему на следующий день (например), проверка одноразового номера в клиенте завершится неудачей, поскольку у него больше не будет сохранен этот одноразовый номер, или срок его действия истек и т. Д.

Это вызывает уведомление AuthenticationFailed на клиенте с этим исключением:

"IDX21323: RequireNonce is '[PII is hidden]'. OpenIdConnectProtocolValidationContext.Nonce was null, OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce was not null. The nonce cannot be validated. If you don't need to check the nonce, set OpenIdConnectProtocolValidator.RequireNonce to 'false'. Note if a 'nonce' is found it will be evaluated."

В этот момент я мог HandleResponse, перенаправить на страницу ошибки и так далее. Если они затем снова пытаются получить доступ к защищенному ресурсу, перенаправление на IdentityServer немедленно возвращает токен идентификатора из-за предыдущего успешного входа в систему (с его точки зрения, я полагаю?), И на этот раз одноразовый номер проверяется, и пользователь входит в клиент, Но это довольно странный опыт для пользователя - его первая попытка входа в систему, кажется, терпит неудачу, они получают ошибку, но затем, когда они пытаются снова, им даже не нужно входить в систему, их просто принимают прямо.

Альтернативой может быть обработка этого типа исключения в AuthenticationFailed путем перенаправления на домашний защищенный ресурс, так что это происходит "незаметно" в фоновом режиме. Пользователю кажется, что их первая попытка входа в систему сработала. Но я не уверен, подходит ли это для подлинных вопросов о проверке nonce. Я также обеспокоен тем, что в некоторых случаях это может привести к петлям перенаправления.

Итак, чтобы перейти к моему вопросу... каков общий подход к этой проблеме закладки страниц входа в систему / nonces? Я сделал фундаментальную ошибку или обнаружил фундаментальное недоразумение где-то вдоль линии, которая позволила этому сценарию произойти?

0 ответов

Вот код, который нужно ввести в вызов

UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
   AuthenticationType = "oidc",
   Authority = appSettings["ida:Authority"],
   ClientId = appSettings["ida:ClientId"],
   ClientSecret = appSettings["ida:ClientSecret"],
   PostLogoutRedirectUri = appSettings["ida:PostLogoutRedirectUri"],
   RedirectUri = appSettings["ida:RedirectUri"],
   RequireHttpsMetadata = false,
   ResponseType = "code id_token",
   Scope = appSettings["ida:Scope"],
   Notifications = new OpenIdConnectAuthenticationNotifications
   {
       AuthenticationFailed = authFailed =>
       {
           if (authFailed.Exception.Message.Contains("IDX21323"))
           {
              authFailed.HandleResponse();
              authFailed.OwinContext.Authentication.Challenge();
           }

           return Task.FromResult(true);
                    }
         },
      SignInAsAuthenticationType = "Cookies"
    }
});
Другие вопросы по тегам