Проверьте пользователя OpenID Connect на соответствие локальным пользователям веб-приложений с помощью OWIN

#asp.net-mvc #owin #openid-connect

#asp.net-mvc #овин #OpenID-подключение

Вопрос:

Мне нужно добавить аутентификацию OpenID Connect к существующему ASP.NET Веб-приложение MVC. Для этого я использую OWIN.

После того, как пользователь был успешно аутентифицирован сервером аутентификации (в моем случае Azure Active Directory), мне нужно проверить, что пользователь может быть сопоставлен с локальной учетной записью в моем веб-приложении. Если у пользователя нет действительной локальной учетной записи, фактический процесс входа в систему должен завершиться неудачей. Есть ли стандартный способ сделать это?

В образце, который я нашел (https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-asp-webapp ), кажется, что как только пользователь успешно проходит аутентификацию в Azure, он регистрируется в приложении. Можем ли мы добавить пользовательский код в процесс входа OWIN-OIDC для выполнения дополнительных проверок?

Спасибо за вашу помощь.

Ответ №1:

Хороший вопрос, и здесь есть 2 уровня, как вы находите:

  • Аутентификация с помощью сервера авторизации / поставщика удостоверений
  • Доступ к приложению разрешен

Если первое выполнено успешно, а второе — нет, то стандартным поведением является перенаправление пользователя на страницу «Доступ запрещен» (эта страница должна разрешать анонимный доступ, чтобы избежать цикла перенаправления). Ошибка входа в систему не удалась, но пользователь не авторизован для доступа к приложению.

OWIN использует response_type=’code id_token’, что означает, что у вас будет идентификатор пользователя Open Id Connect для работы. Если вы не можете найти пользователя в своих собственных данных, вы можете выполнить перенаправление в приведенном ниже обратном вызове:

 var openidOptions = new OpenIdConnectAuthenticationOptions
{
    Notifications = new OpenIdConnectAuthenticationNotifications
    {
        // Point to a callback to check the identity against my own system
        // This callback can perform a redirect if the app does not recognise the user
        AuthorizationCodeReceived = HandleAuthorizationCodeReceived
    }
}
 

Комментарии:

1. Большое спасибо за ваш ответ! Есть ли веская причина использовать openidOptions. Уведомления. Получен код авторизации, а не openidOptions. Обратный путь?

2. Вам нужно закодировать некоторую логику, чтобы увидеть, существует ли пользователь в вашей системе, как только перенаправление входа вернется в ваше приложение. AuthorizationCodeReceived — это функция, и вы можете вставить туда логику, как только у вас будет идентификатор пользователя (на основе токена id). Обратный путь — это просто значение, поэтому вы не можете кодировать там логику.