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

dev*_*r82 3 identityserver4

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

我希望能够做的是跳过登录页面并将用户直接重定向到MS AD登录页面.这意味着,用户将单击网站上的"登录"链接,这将导致他进入Azure AD登录页面.一旦他成功登录,他将被重定向回我的应用程序(基本上是相同的流程,只需保存进入IdentityServer登录页面并单击外部登录按钮的额外步骤).

这可能吗?

Aly*_*yce 6

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

EnableLocalLogin

指定此客户端是否可以仅使用本地帐户或外部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);
}
Run Code Online (Sandbox Code Playgroud)