将 jwt 令牌作为 url 的一部分传递是否很糟糕?

Posted

技术标签:

【中文标题】将 jwt 令牌作为 url 的一部分传递是否很糟糕?【英文标题】:is it bad to pass jwt token as part of url?将 jwt 令牌作为 url 的一部分传递是不是很糟糕? 【发布时间】:2019-10-09 22:24:20 【问题描述】:

您好,目前我有一个 Angular 应用程序和 Java 后端。在我的角度组件 html 中,我有一些图像,例如个人资料照片。提供图像文件的资源由 spring security 保护。 所以我的问题是将 json Web 令牌作为图像 url 的一部分附加是不是很糟糕?它会导致安全漏洞吗?这是一种不好的做法吗?

以下是我的 Angular 代码在 chrome 开发者工具中的样子。

<div _ngcontent-c5="" class="avatar-circle bg-secondary text-brand-secondary" ng-reflect-klass="avatar-circle" ng-reflect-ng-class="bg-secondary,text-brand-second" style="background-image: url(&quot;http://localhost:8080/api/files/4eb81fa8-9c5d-4920-b0f5-c9239fb1cae7?access_token=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJnbG9iYWxhZG1pbkBsb2NhbGhvc3QiLCJhdXRoIjoiUk9MRV9HTE9CQUxfQURNSU4iLCJleHAiOjE1NjExOTkwNTh9.UFvdgZNxs_O1uTjtUh64ko3A47R2fxZxYFX0aXv2Jp_TkVrmlBT1mzN40JwclGk3m0sCZONKbnVhgXXKy69DfQ&quot;);">
  <!--bindings=
  "ng-reflect-ng-if": "false"
-->
</div>

感谢任何帮助。我很想将 access_token 作为 http get 请求标头的一部分传递,但我无法在任何地方找到合适的代码。任何帮助表示赞赏。

【问题讨论】:

Is it safe to put a jwt into the url as a query parameter of a GET request?的可能重复 【参考方案1】:

根据图像的不同,您可能希望将其公开或考虑使用不同的方式将令牌发送到服务器(cookie 可能会有所帮助)。

它会导致安全漏洞吗?这是一种不好的做法吗?

正如我在previous answer 中提到的,JWT 令牌的 语法 是 URL 安全的。这是RFC 7519的引述:

JWT 表示为由句点 (.) 字符分隔的 URL 安全部分序列。每个部分都包含一个 base64url 编码的值。 [...]

但是,当使用 JWT 作为不记名令牌时,建议避免在 URL 中发送它们。请参阅RFC 6750 中的以下引用:

不要在页面 URL 中传递不记名令牌:不应该在页面 URL 中传递不记名令牌(例如,作为查询字符串参数)。

相反,不记名令牌应该在已采取保密措施的 HTTP 消息头或消息体中传递。

浏览器、网络服务器和其他软件可能无法充分保护浏览器历史记录、网络服务器日志和其他数据结构中的 URL。如果不记名令牌在页面 URL 中传递,攻击者可能能够从历史数据、日志或其他不安全的位置窃取它们。

【讨论】:

以上是关于将 jwt 令牌作为 url 的一部分传递是否很糟糕?的主要内容,如果未能解决你的问题,请参考以下文章

如何将JSON Web令牌(JWT)传递给get请求

JWT 令牌作为 API 中用户详细信息的来源?

在 Rest API 中传递 JWT 令牌

传递 JWT 令牌以访问 API

如何将 jwt 令牌添加到 url?

如何通过 AngularJS 传递 JsonWebToken(JWT)