我想将自托管 OpenID Connect (OIDC) 服务器与 JWT 结合使用作为授权令牌(OIDC 术语中的访问令牌)。 JWT 将用于保护 REST 服务,而 UI 是经典应用程序和单页应用程序(Angular)的混合。这样,REST 层将能够基于无状态 JWT 令牌进行授权,因此不需要额外的数据库连接,如下所述:
https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/ https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
对于单页应用程序,OIDC 隐式流比较合适。但是,当隐式流与无状态 JWT 令牌结合使用时,我发现一个安全问题:令牌作为 URL 中的片段部分进行传递,这意味着无法删除它们(它们很容易在浏览器历史记录中可用),也无法使其失效他们(他们是无状态的)-> 不可能注销。
我看到有两个选项可以缓解这个问题:
- 使用非常短暂的令牌(最多几分钟)。这可能会极大地妨碍可用性。
- 通过 AJAX 使用授权代码流。这是不符合 OIDC 标准但由于令牌不会在 URL 中公开,因此可以注销。
第三种选择是放弃无状态 JWT 令牌并使用带有数据库检查的简单不记名令牌。
我错过了什么吗?你会选择什么?
人们可能会争论片段最终出现在浏览器历史记录中的风险,但“简单”的不透明承载令牌将受到您为 JWT 令牌描述的相同限制
OpenID Connect 规范当然不会阻止使用 AJAX 代码流,因此您可以直接使用它;隐式流程只是浏览器内客户端的建议,因为它优化了向用户代理获取令牌的往返次数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)