#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. Я добавил решение уже в качестве ответа на свой вопрос. Подробности см. Ниже.