#c# #asp.net #owin #openid-connect #openid
#c# #asp.net #owin #openid-connect #openid
Вопрос:
Есть ли какой-либо случай, когда пользователь может иметь исключение одноразового номера с истекшим OpenIdConnectProtocolInvalidNonceException
сроком действия и все еще проходить проверку подлинности?
Я нашел старую реализацию в исходном коде моей компании, где предыдущий разработчик реализовал следующее при AuthenticationFailed
уведомлении:
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = n =>
{
if(n.Exception is OpenIdConnectProtocolInvalidNonceException)
{
// This is the confusing line
if(n.OwinContext.Authentication.User.Identity.IsAuthenticated)
{
n.SkipToNextMiddleware();
return Task.FromResult(0);
}
}
}
}
Как вы видите, это if
утверждение if(n.OwinContext.Authentication.User.Identity.IsAuthenticated)
вызвало у меня некоторое замешательство, поскольку мы фактически находимся в уведомлении об ошибке аутентификации.
При отладке с исключением nonce с истекшим сроком действия я всегда получаю n.OwinContext.Authentication.User.Identity.IsAuthenticated = false
.
Является ли это if
утверждение бесполезным?
Ответ №1:
Потратив некоторое время на эту тему, я обнаружил, что случай, когда пользователь может быть уже аутентифицирован, но получает a OpenIdConnectProtocolInvalidNonceException
, — это когда пользователь нажимает кнопку «Назад» в браузере после успешного входа в систему. В этом случае пользователь аутентифицируется, но одноразовый номер отсутствует.