在OpenID Connect中,如果用户连接到身份提供商(我们已经授权我的客户端应用程序),我希望我的用户自动连接到我的客户端。
这是我想要的工作流程:
就像" Gateway" CAS中的模式。 我使用授权代码流,我不想使用Javascript with Implicit Flow来动态登录JS。
你知道是否有可能吗?我在规范中找不到它。
谢谢:)
答案 0 :(得分:2)
您正在考虑在IDP之上的SSO行为。这通常不在OpenID Connect规范之外,并且通常绑定到您正在使用的特定身份提供程序(例如: - Azure,PING或WSO2)。但是有一些参数来调整这种行为,例如提示和 login_hint 这些是可选的。
来自OpenID Connect authentication request section
<强>提示强>
空格分隔,区分大小写的ASCII字符串值列表 指定授权服务器是否提示最终用户 重新认证和同意。
有效广告登录,无,同意和 select_account 。您可以使用它们强制强制登录或允许选择帐户。
login_hint
向Authorization Server提供有关登录的提示 最终用户可能用于登录的标识符(如有必要)
一个很好的例子是通过将login_hint传递给身份提供者来启用SSO行为。如果身份提供者可以验证身份验证(例如)公司LDAP并检测登录状态,则可以提供无凭证登录体验。同时,即使身份提供者持有登录会话,您也可以使用 prompt = login 来强制登录。
答案 1 :(得分:0)
或者,您可以使用signinSilent()
。我已经在登录页面ngOnInit
中使用了它(因为AuthGuard无论如何都会将用户重定向到登录名,所以我认为这将是我的理想选择)。
// login.ts
ngOnInit(): void {
this.authService.signinSilent().then(_ => {}).catch(_ => {});
}
// authService
public signinSilent() {
return this.userManager.signinSilent();
}
如果用户已经具有与idp的有效会话,则 signinSilent
方法将返回用户对象。否则会引发错误,可能是login_required
。