Исключение OpenIdConnectProtocolInvalidNonceException. Может ли пользователь по-прежнему проходить аутентификацию при уведомлении об ошибке аутентификации?

#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 , — это когда пользователь нажимает кнопку «Назад» в браузере после успешного входа в систему. В этом случае пользователь аутентифицируется, но одноразовый номер отсутствует.