7

我想将自托管 OpenID Connect (OIDC) 服务器与 JWT 结合使用作为授权令牌(OIDC 术语中的访问令牌)。JWT 将用于保护 REST 服务,而 UI 是经典应用程序和单页应用程序 (Angular) 的混合体。这样,REST 层将能够基于无状态 JWT 令牌进行授权,因此不需要额外的数据库连接,如下所述:

https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/

对于单页应用,OIDC 隐式流是合适的。但是,当隐式流与无状态 JWT 令牌结合使用时,我发现了一个安全问题:令牌作为 URL 中的片段部分提供,这意味着无法删除它们(它们在浏览器历史记录中很容易获得)也不会失效它们(它们是无状态的)-> 无法注销。

我看到 2 个选项可以缓解这种情况:

  1. 使用非常短暂的令牌(最多几分钟)。这可能会极大地阻碍可用性。
  2. 通过 AJAX 使用授权码流。这不符合 OIDC,但会使注销成为可能,因为令牌不会在 URL 中公开。

第三种选择是放弃无状态 JWT 令牌并使用简单的不记名令牌和数据库检查。

我错过了什么吗?你会选择什么?

4

1 回答 1

1

有人可能会争论片段最终出现在浏览器历史中的风险,但“简单”不透明的不透明承载令牌将受到您为 JWT 令牌描述的相同限制

OpenID Connect 规范当然不会阻止使用带有 AJAX 的代码流,因此您可以使用它;隐式流程只是对浏览器内客户端的建议,因为它优化了往返次数以获取用户代理的令牌

于 2014-12-17T06:54:35.770 回答