Добавление проверки подлинности Azure AD в существующее приложение .Net MVC: id_token не проверяется

#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 все еще ссылались и включались в сборку.

Ссылки на проекты WebMatrix

Удаление этих ссылок, очистка и перестройка решили проблему.