IdentityServer4 - 直接从外部提供商登录

问题描述 投票:0回答:1

我已经实现了从 Azure AD 登录的选项。我使用的客户端类型是混合型。因此,现在,当用户在我的应用程序上输入受限控制时,他将被重定向到登录页面(在 IdentityServer 应用程序站点上),他可以在其中输入用户名和密码,也可以使用 Azure AD 帐户登录。

我想要做的是跳过登录页面并将用户直接重定向到 MS AD 登录页面。这意味着,用户将单击网站上的“登录”链接,这将引导他进入 Azure AD 登录页面。一旦他成功登录,他将被重定向回我的应用程序(基本上相同的流程,只需省去进入 IdentityServer 登录页面并单击外部登录按钮的额外步骤)。

这可能吗?

identityserver4
1个回答
12
投票

在客户端选项中,尝试将 EnableLocalLogin 设置为 false。来自文档

启用本地登录

指定此客户端是否可以使用本地帐户或仅使用外部 IdP。默认为 true。

我也使用 Asp.Net Core Identity,如果 EnableLocalLogin 为 false 并且只有一个外部提供商,或者在请求中显式设置了 idP,我将 AccountsController 设置为绕过本地页面。

[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> Login(string returnUrl = null)
{
    // Clear the existing external cookie to ensure a clean login process
    await HttpContext.Authentication.SignOutAsync(_externalCookieScheme);

    var context = await _interaction.GetAuthorizationContextAsync(returnUrl);
    if (context?.IdP != null)
    {
        // if IdP is passed, then bypass showing the login screen
        return ExternalLogin(context.IdP, returnUrl);
    }

    var vm = await BuildLoginViewModelAsync(returnUrl, context);

    if (vm.EnableLocalLogin == false && vm.ExternalProviders.Count() == 1)
    {
        // only one option for logging in
        return ExternalLogin(vm.ExternalProviders.First().AuthenticationScheme, returnUrl);
    }

    return View(vm);
}
© www.soinside.com 2019 - 2024. All rights reserved.