如果尚未登录,OpenID Connect,无需登录表单重定向?

时间:2018-01-17 09:23:29

标签: authentication single-sign-on openid-connect

在OpenID Connect中,如果用户连接到身份提供商(我们已经授权我的客户端应用程序),我希望我的用户自动连接到我的客户端。

这是我想要的工作流程:

  • USER到达CLIENT主页
  • USER被重定向到IdP(授权请求)
    • 如果他已登录IdP,他将重定向到CLIENT并开始OIDC工作流程,然后他已登录CLIENT
    • 如果他没有登录IdP或他没有授权CLIENT访问他的身份,则不会向USER显示IdP的登录表单,并且他已重定向到CLIENT主页,未登录

就像" Gateway" CAS中的模式。 我使用授权代码流,我不想使用Javascript with Implicit Flow来动态登录JS。

你知道是否有可能吗?我在规范中找不到它。

谢谢:)

2 个答案:

答案 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