Есть успехи в использовании AddMicrosoftIdentityWebApp в сочетании с IdentityServer4?

#asp.net-core #azure-active-directory #identityserver4 #openid-connect

#asp.net-core #azure-active-directory #identityserver4 #OpenID-connect

Вопрос:

Я пытаюсь настроить Microsoft в качестве внешнего поставщика входа в Identityserver4. Мне удалось, следуя документации identity server с использованием AddMicrosoftAccount :

 services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
 {
  microsoftOptions.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
  microsoftOptions.ClientId = configuration["MicrosoftLoginProvider:ClientId"];
  microsoftOptions.ClientSecret = configuration["MicrosoftLoginProvider:ClientSecret"];
 });
  

Однако мне не повезло с получением единого выхода для работы. Документация соответствует документации Microsoft по адресу https://learn.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins?view=aspnetcore-5.0.

Однако, если вы будете следовать инструкциям по созданию приложения в Microsoft Developer Portal (portal.azure.com ), пример кода на этом портале предлагает другой способ. Пример приложения, сгенерированного для меня порталом (WebApp-OpenIdConnect-DotNet), использует AddMicrosoftIdentityWebApp :

  services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));
  

Поскольку это приложение работает «из коробки», включая единый выход, мне интересно, так ли я должен продолжать.

Однако, к моему удивлению, я не могу найти никаких документов / блогов о том, как интегрировать этот подход в IdentityServer4. Я почти заставил его работать сам, но есть несколько странных проблем.

Может кто-нибудь уточнить, можно ли использовать AddMicrosoftIdentityWebApp способ добавления Microsoft в качестве внешнего поставщика удостоверений в Identityserver4? Кому-нибудь удалось начать AddMicrosoftIdentityWebApp работать с IdentityServer4?

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

Ответ №1:

Я понял, как заставить его работать.

На самом деле, мне нужно было сделать только две вещи.

Во-первых, мне пришлось удалить OpenIdConnectDefaults.AuthenticationScheme вызов AddAuthentication в примере кода, сгенерированного Microsoft. Таким образом, код становится:

   services.AddAuthentication()
     .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));
  

Затем в коде, который считывает внешнюю идентификацию из временного файла cookie, мне пришлось использовать CookieAuthenticationDefaults .Схема аутентификации. Итак, этот код теперь выглядит следующим образом:

 var authenticationResult = await HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);
  

Это было все.

Ответ №2:

Покопавшись, я нашел это утверждение здесь:

Майкрософт.Идентификация.Веб — это более простой способ использования Azure AD в ASP.NET Основные веб-приложения и веб-API.

Он не заменяет ASP.NET Идентификация ни в коем случае не заменяет AddJwtBearer или AddCookie или любой из примитивов более низкого уровня, но он использует и правильно настраивает их для Azure AD.

Он не работает с поставщиками удостоверений, отличными от Azure. Он заменяет AzureAD.Пользовательский интерфейс и AzureADB2C.Пользовательский интерфейс, который устарел в .NET 5.0

Итак, вывод таков, что Microsoft.Идентификация.Web не работает за пределами Azure AD и, следовательно, не с IdentityServer.

Если вы заставите его работать, дайте мне знать!

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

1. Спасибо @Tore. Однако мне интересно, верен ли ваш вывод. Из заявления «Это не работает с поставщиками удостоверений, отличными от Azure». на странице, на которую вы ссылались, я понимаю, что вы не можете использовать пакет, например, для Google. Это не значит, что его нельзя использовать для настройки Azure AD в качестве внешнего поставщика удостоверений в IdentityServer4, не так ли?

2. Сомневаюсь, что это повлияет / поможет в обмене IdentityServer <-> Azure AD, поскольку это общение довольно налажено и «просто» по сравнению с логикой, которую оно решает в клиентских приложениях.

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

4. Любопытно, что у вас получилось на самом деле? было бы неплохо, если бы вы могли опубликовать его в качестве ответа здесь 🙂

5. Я добавил решение уже в качестве ответа на свой вопрос. Подробности см. Ниже.