授权端点有一个 acr_values 属性,该属性接受 idp:name_of_idp 格式的 idp-value(参见页面底部)
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=...&scope=...&response_mode=...&nonce=...&acr_values=idp:oidc&state=...&x-client-SKU=...&x-client-ver=... p>
这将跳过 IdentityServer 的登录页面并重定向到选定的外部 Idp。
如果客户端应用程序不是您编写的,并且您必须在服务器端指定外部身份提供者,
基于客户端,那么它可能有点棘手,我不记得这个特性是由 IdentityServer 原生支持的。我认为您必须在客户端验证成功后自己实现这种逻辑。
我会使用附加的 acr_values 解决方案重定向到登录页面,以最小化我的代码并最大化内置 IdentityServer 功能。
不重定向,但您可以通过 IdentityProviderRestrictions
缩小服务器端客户端的可用 Idp 列表
IdentityServer 端的客户端配置
new Client
{
// serverside client configuration
// ..
IdentityProviderRestrictions = new string[]{"oidc"},
// ...
}