OIDC client redirect to specific login provider at IdentityServer4(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上的特定登录提供商
基础教程推荐
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 动态更新多个选择框 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06