【问题标题】:How to automatically choose a default AzureAD authentication provider from IdentityServer4?如何从 IdentityServer4 中自动选择默认的 AzureAD 身份验证提供程序?
【发布时间】:2024-04-26 04:40:01
【问题描述】:

想要从 IdentityServer4 针对 AzureAD 启用多个身份验证提供程序。 (类似参考:Enable multiple AzureAd in Identityserver4 .NET Core

此行为的原因取决于 Web 客户端应用程序,每个应用程序都需要针对不同的 AzureAD 客户端应用程序进行身份验证,并使用 AzureAD 中的清单设置定义不同的应用程序内角色。

(所以这已经完成了。)

另一个问题是在通过 IdentityServer4 登录时没有为用户提供多个身份验证选项,而是希望根据每个 Web 客户端应用程序的配置设置自动选择多个 AzureAD 身份验证选项之一。

这对于 IdentityServer4 是否很容易实现,或者已经可用?

【问题讨论】:

  • 你做到了吗?我设法传递了 acr_values,但 Idsrv 4 仍然没有自动重定向到外部提供商

标签: asp.net-core azure-active-directory identityserver4


【解决方案1】:

授权端点有一个 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"},

    // ...
}

【讨论】:

    最近更新 更多