Страница входа в закладки с одноразовым
Я пытаюсь интегрировать веб-клиент 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"
}
});