Конечная точка авторизации имеет атрибут acr_values , который принимает значение idp в формате idp: name_of_idp (см. В самом низу страницы) http://docs.identityserver.io/en/latest/endpoints/authorize.html
Скажем, у вас есть это в вашем IdentityServer Startup
.AddOpenIdConnect("oidc", "OpenID Connect", options =>
{
// ..
// Your serverside configuration here
// ..
});
И это ваш Запуск клиента Mvc Core
.AddOpenIdConnect("oidc", options =>
{
// ..
// Your client side configuration here
// ..
options.Events.OnRedirectToIdentityProvider = n =>
{
n.ProtocolMessage.AcrValues = "idp:oidc"; // Refers to the oidc scheme in Server's startup
return Task.FromResult(0);
};
});
Теперь,если вы хотите получить доступ к защищенной конечной точке с помощью клиента, перенаправление авторизации сгенерирует URL-адрес примерно так:
https: // ...? client_id = ... & redirect_uri =... & response_type = ... & сфера = ... & response_mode = ... & ... = одноразовое значение & acr_values = IDP: РСИН & состояние = ... & х-client-SKU = ... & x-client-ver = ...
Это пропустит страницу входа в IdentityServer и перенаправит на выбранный внешний Idp.
Если клиентприложения не написаны вами, и вы должны указать внешнего поставщика удостоверений на стороне сервера на основе клиента, тогда это может быть немного сложнее, и я непомните, что эта функция изначально поддерживается IdentityServer.Я думаю, что вы должны реализовать такую логику самостоятельно после проверки клиента успешно.Я бы пошел с перенаправлением на страницу входа в систему с добавленным решением acr_values, чтобы минимизировать мой код и максимально использовать встроенные функции IdentityServer.
Не перенаправлять, но вы можете сузить список доступных Idp для клиентов на стороне сервера с помощью IdentityProviderRestrictions
Конфигурация клиента на стороне IdentityServer
new Client
{
// serverside client configuration
// ..
IdentityProviderRestrictions = new string[]{"oidc"},
// ...
}