我想将自托管 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 个选项可以缓解这种情况:
- 使用非常短暂的令牌(最多几分钟)。这可能会极大地阻碍可用性。
- 通过 AJAX 使用授权码流。这不符合 OIDC,但会使注销成为可能,因为令牌不会在 URL 中公开。
第三种选择是放弃无状态 JWT 令牌并使用简单的不记名令牌和数据库检查。
我错过了什么吗?你会选择什么?