#asp.net-mvc #azure-active-directory #openid-connect
Вопрос:
Я пытаюсь добавить проверку подлинности Azure AD в a .Приложение Net MVC, которое в настоящее время использует отдельные учетные записи пользователей. Я настроил регистрацию приложения в Azure, а также установил и настроил OpenID Connect.
В Startup.cs я добавил:
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
// app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
// Sets the ClientId, authority, RedirectUri as obtained from web.config
ClientId = clientId,
Authority = authority,
RedirectUri = redirectUri,
// PostLogoutRedirectUri is the page that users will be redirected to after sign-out. In this case, it is using the home page
PostLogoutRedirectUri = redirectUri,
Scope = OpenIdConnectScope.OpenIdProfile,
// ResponseType is set to request the id_token - which contains basic information about the signed-in user
ResponseType = OpenIdConnectResponseType.IdToken,
// ValidateIssuer set to false to allow personal and work accounts from any organization to sign in to your application
// To only allow users from a single organizations, set ValidateIssuer to true and 'tenant' setting in web.config to the tenant name
// To allow users from only a list of specific organizations, set ValidateIssuer to true and use ValidIssuers parameter
TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true // Simplification (see note below)
},
// OpenIdConnectAuthenticationNotifications configures OWIN to send notification of failed authentications to OnAuthenticationFailed method
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed
}
}
);
И в web.config
я установил тип аутентификации Нет
<authentication mode="None"/>
Затем я добавил метод действия, чтобы вызвать вызов:
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties { RedirectUri = "http://localhost:54465" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
Я все еще могу войти в приложение с помощью отдельных учетных записей пользователей (я бы хотел сохранить это в качестве опции), но не могу войти в Azure AD. Пользователь перенаправляется на экран входа в Azure AD, входит в систему, и я вижу, что ответ возвращается с помощью id_token, но никогда не проходит проверку подлинности в приложении.
Я понял, что это должно происходить автоматически в промежуточном программном обеспечении OpenID Connect, но есть ли что-нибудь еще, что нужно настроить?
Ответ №1:
Не забудьте указать RedirectUri
, что совпадает с вашим приложением, зарегистрированным в azure ad.
Я тестирую ваш код и могу пройти аутентификацию в приложении. В разделе Регистрация приложения Azure ad нажмите Authentication
и выберите Id Token
.
Вы можете обратиться к этой статье и загрузить пример добавления входа платформы Microsoft identity в ASP.NET веб-приложение.
Комментарии:
1. Привет, Джоуи. Проверили, и перенаправление совпадает между регистрацией приложения Azure и тем, что передается в параметры аутентификации Open ID в Startup.cs. Включил маркеры идентификаторов в Azure — я вижу, что возвращается идентификатор, и если я расшифрую его вручную, то смогу увидеть, что он действителен. Ссылка, которую вы опубликовали, — это та, которой я пользовался, но, должно быть, я что-то упускаю.
Ответ №2:
Я создал чистый проект, используя ту же регистрацию приложения Azure, и он работал так, как ожидалось, поэтому начал сравнивать чистый проект с моим старым. В самые первые дни проекта он использовал SimpleMembershipProvider, и хотя с тех пор проект был изменен на использование ASP.Сетевая идентификация на библиотеки DLL WebMatrix все еще ссылались и включались в сборку.
Удаление этих ссылок, очистка и перестройка решили проблему.