У меня есть идея использовать IdentityServer4 и настроить его для использования внешнего поставщика или его собственной базы данных пользователей. Например, если есть Azure AD, настроенный через файл .json - используйте его. Если Azure AD недоступен - используйте базу данных собственных пользователей. Файл конфигурации может быть изменен администратором в зависимости от определенных условий настройки.
Однако я не могу понять, как можно получить информацию внешнего провайдера от IdentityServer .well-known/openid-configuration
content
Я запустил IdentityServer4.Samples \ Quickstarts \ 4_ImplicitFlowAuthenticationWithExternal \ src \ IdentityServer, и кажется, что при обращении к http://localhost:5000/.well-known/openid-configuration
нет информации о внешнем поставщике.
Однако http://localhost:5000/Account/Login
показывает login password
текстовые поля и кнопку OpenID connect
.
Вот суть с примером исходного кода. А вот конфигурация openidconnect:
.AddOpenIdConnect("oidc", "OpenID Connect", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SignOutScheme = IdentityServerConstants.SignoutScheme;
options.SaveTokens = true;
options.Authority = "https://demo.identityserver.io/";
options.ClientId = "implicit";
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
});
Когда IdentityServer запущен, я могу просмотреть страницу http://localhost:5000/Account/Login
с текстовыми полями логин | пароль и кнопкой OpenId Connect
. Эта кнопка связана с http://localhost:5000/External/Challenge?provider=oidc
url.
Таким образом, каждый пользователь может видеть эту кнопку внешнего поставщика и использовать для входа в систему.
Но как насчет сервиса (или разработчика, который создает клиента) и должен использовать мой сервис в качестве источника данных?
Можно ли настроить IdentityServer4 для отображения внешнего поставщика в выводе страницы обнаружения?
Можно ли настроить IdentityServer4 в качестве прозрачного прокси-сервера для внешнего поставщика удостоверений? Чтобы заставить http://localhost:5000/connect/token
вызывать внешнего провайдера (если он был установлен) или использовать локальную базу данных пользователей иначе?