OIDC客户端重定向到标识服务器4上的特定登录提供商

OIDC client redirect to specific login provider at IdentityServer4(OIDC客户端重定向到标识服务器4上的特定登录提供商)

本文介绍了OIDC客户端重定向到标识服务器4上的特定登录提供商的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这样我就有了一个基本设置。具有3个登录选项的身份服务器。用户名/密码、Google登录和外部登录提供商。就像我现在运行以下代码时一样:

var config = {
    authority: "https://example.com",
    client_id: "js",
    redirect_uri: "https://example.com/callback.html",
    response_type: "code",
    scope: "openid profile api1",
    post_logout_redirect_uri: "https://example.com/index.html",
};
var mgr = new Oidc.UserManager(config);

function login() {
    mgr.signinRedirect();
}

我被重定向到以下页面。

当我按LOGIN时,我被重定向到我的登录页面:

这些都很好。但现在我对登录过程有了新的要求。他们希望在Java客户端上有一个特定的登录按钮来启动与Google的登录,并希望有一个特定的按钮来从Java客户端登录到OpenIDConnect登录提供程序。

这样我就可以有一些子页面了。/GoogleIntegrations.html或其他名称。在那里,我希望有一个按钮&试用Google登录,它应该会通过重定向到身份服务器来启动登录到Google,然后立即使Google重定向。

有没有人有类似的用例?

编辑1:

帐户控制器可在此处找到: https://github.com/TopSwagCode/Dotnet.IdentityServer/blob/master/src/IdentityServerAspNetIdentity/Controllers/Account/AccountController.cs

编辑2: 我已经尝试了abdusco的解决方案,但我被困在身份服务器上。我不会被重定向回我的Java脚本客户端。

例如:如果我有按钮: Https://localhost:5001/External/Challenge?scheme=OpenIdConnect 我确实会被重定向到外部登录提供商。但当我登录时,我会停留在Identity Server页面上。

我还尝试使用以下链接登录:

https://localhost:5001/External/Challenge?returnurl=/connect/authorize/callback?client_id=js&;redirect_uri=https%3A%2F%2Flocalhost%3A5003%2Fcallback.html&;response_type=code&;scope=openid%20profile%20api1&;scheme=OpenIdConnect

正常流量下的GIF:

编辑3:

使用注释中的以下代码:

var returnUrl = location.href;
var url = "https://localhost:5001/External/Challenge?returnurl=" + returnUrl + "&scheme=OpenIdConnect"
location.href = url;

引发异常。请参见下面的代码截图

编辑4:

我正在调查另一种方法,但仍然没有完全按我想要的方式工作。在身份登录页面上,您可以绕过用户名/密码登录。如果我注释掉该代码,只需重定向到我的OpenIdConnect登录。我可以登录并按我想要的方式重定向到客户端,但这将不允许我使用Google或用户名密码登录。

代码如下所示:

    /// <summary>
    /// Entry point into the login workflow
    /// </summary>
    [HttpGet]
    public async Task<IActionResult> Login(string returnUrl)
    {
        // build a model so we know what to show on the login page
        var vm = await BuildLoginViewModelAsync(returnUrl);

        var context = HttpContext;

        //if (vm.IsExternalLoginOnly)
        //{
            // we only have one option for logging in and it's an external provider
            return RedirectToAction("Challenge", "External", 
                new { scheme = "OpenIdConnect", provider = vm.ExternalLoginScheme, returnUrl });
        /

本文标题为:OIDC客户端重定向到标识服务器4上的特定登录提供商

基础教程推荐