#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). Обратный путь — это просто значение, поэтому вы не можете кодировать там логику.