ORY Hydra 和验证 OpenID Connect 登录

ORY Hydra and validating an OpenID Connect login

ORY Hydra 目前是否具有验证客户端是否通过 OpenID Connect 登录的功能?我注意到有一个 API 到 logout via front-channel

但是,当用户重新访问身份提供者时,我无法知道他们当前是否登录。他们可以删除他们的客户端 HTTP cookie,然后我就与 Hydra 不同步了。含义:Hydra 将它们作为登录状态,但我现在将它们作为注销状态。此外,在后台通道注销的情况下,我希望能够查询此状态。

是否有一个 API 我忽略了它可以让我知道客户端当前是否有通过 Hydra 进行的活动 OpenID Connect 登录?

目前看来,唯一能做的就是将用户重定向到 the authorization endpoint,因为我们无法知道他们是否获得授权。

Hydra 附带的以下两个表似乎是我所追求的数据的真实来源:hydra_oauth2_accesshydra_oauth2_authentication_session。如果开箱即用不支持 HTTP API 以查看用户是否有活动的身份验证会话,直接查询这些是否有意义?

登录状态

OAuth 客户端最常见的是 UI 具有多个用户的应用程序。每个用户的登录状态都由应用程序或用户都无法访问的授权服务器会话 cookie 表示:

  • 授权服务器(AS)发布一个SSO cookie,存储在AS域的系统浏览器中
  • Web UIs 和 Native UIs 在后续请求调用系统浏览器时隐式发送它

授权重定向

当 OAuth UI 重定向用户时,通常不知道是否:

  • 系统将提示用户登录
  • 用户将静默登录(例如,用户可能已经登录到另一个应用程序)

对于 Web UI,可以使用 prompt=none 参数在隐藏的 iframe 上发送授权重定向。如果用户需要登录,将返回 login_required 错误代码。有关详细信息,请参阅我的 Silent Token Renewal Page

然而,这并不完全可靠,并且有一些 browser issues in 2020。如果您使用不同类型的客户端,它也可能不适合。

联合登录

在某些设置中,AS 进一步重定向到身份提供者 (IDP),并且用户的登录状态进一步受到 IDP 会话 cookie 的影响。

应用程序无法获取用户的 IDP 登录状态,因为应用程序只与 AS 交互。

是否存在可用性问题?

如果是,post回来我们可以进一步讨论...

通过重定向向提供者发送身份验证请求,包括 prompt=none 解决了这个用例:如果提供者正在进行 SSO 会话,它将静默登录并 return 新令牌,它将return 错误代码 login_required 如果没有。

请注意,在这两种情况下永远不会有明确的用户交互,因此这很方便(并且意味着)在隐藏的 iframe 中 运行。