令牌认证和 SSL

Posted

技术标签:

【中文标题】令牌认证和 SSL【英文标题】:Token authentication and SSL 【发布时间】:2019-07-31 21:08:12 【问题描述】:

我对保护 API 的这一领域还比较陌生。我职业生涯的大部分时间是开发供组织使用的内部产品,或者加入已经实施了安全性(通常不会改变)的产品

在阅读 JWT 和身份服务器时,我了解了签名的作用以及将授权和身份验证分开的必要性。但是,有一件事让我觉得很奇怪: 如果我的用户即将获得一个签名的令牌并使用它来验证自己,并且有一个“中间人”,正在监听并复制该令牌,他可以冒充我的用户吗? (我相信答案是肯定的) 所以我最好的选择是在每次调用我的 API 时使用 SSL。令牌是临时的,对安全的威胁也不少。

所以,我的问题是: 如果我最终在我的 API 调用中使用 SSL,那么签名有什么用?使用 SSL,流量无论如何都被隐藏了,没有人可以篡改它。浏览器可能会将用户名和密码作为纯文本使用,它们不会被暴露。 我在这里错过了什么?

【问题讨论】:

【参考方案1】:

我认为一切都归结为 JWT 在 OpenID Connect 协议 (OIDC) 中的用途。

在 OIDC 中,ID token 是 JWT。如果你通过RFC7519 - JSON Web Token,那么你会遇到Trust Decisions section。

JWT 的内容不能作为信任决策的依据 除非其内容已加密保护并绑定到 信任决策所需的上下文

从 OIDC 的角度来看,信任决策是根据 ID 令牌中包含的声明对最终用户进行身份验证。这只有在验证符合 JWT 规范时才能完成。所以基本上这是OIDC协议和JWT规范的要求。

现在关于 SSL。 OIDC 包含获取最终令牌响应所需的其他几个调用。这些调用包含客户端标识符、机密和授权代码(取决于流程)。 OIDC 建立在 OAuth 2.0 和 OAuth 2.0 mandate SSL(TLS 是新名称)之上。因此 OIDC 也需要 SSL。

结合起来,SSL (TLS) 可以防止在请求和响应以有线方式传输期间的攻击。并且 JWT 的签名保证令牌的真实性与它的接收方式或应用程序的哪个组件处理它无关。

【讨论】:

以上是关于令牌认证和 SSL的主要内容,如果未能解决你的问题,请参考以下文章

RESTful API 的令牌认证:是不是应该定期更改令牌?

无法刷新访问令牌。请重新认证

OAuth 2.0实现分布式认证授权-jwt令牌和普通令牌的区别

双因素身份认证动态口令技术原理及优势

Web Api JWT 令牌认证

REST API 令牌认证