OpenID与无状态JWT令牌连接

时间:2014-12-08 10:22:29

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

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

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

对于单页应用,OIDC Implicit Flow是合适的。但是,当Implicit Flow与无状态JWT令牌结合使用时,我看到一个安全问题:令牌作为URL中的片段部分传递,这意味着无法删除它们(它们在浏览器历史记录中很容易获得)也无效他们(他们是无国籍的) - >不能退出。

我看到两个缓解此问题的方法:

  1. 使用非常短暂的令牌(最长可达几分钟)。这可能会极大地妨碍可用性。
  2. 通过AJAX使用授权代码流。这不符合OIDC ,但可以注销,因为令牌不会在网址中公开。
  3. 第三种选择是放弃无状态JWT令牌,并使用简单的承载令牌进行数据库检查。

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

1 个答案:

答案 0 :(得分:1)

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

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