首页 文章

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

提问于
浏览
2

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

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

这可能吗?

1 回答

  • 5

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

    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);
    }
    

相关问题