您需要在客户端存储令牌,例如使用cookie
or localStorage
Ajax 请求
例如
POST /authenticatedService
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
这是一个示例代码,展示如何使用 jquery 执行 ajax POST 请求
$.ajax({
type: "POST", //GET, POST, PUT
url: '/authenticatedService' //the url to call
data: yourData, //Data sent to server
contentType: contentType,
beforeSend: function (xhr) { //Include the bearer token in header
xhr.setRequestHeader("Authorization", 'Bearer '+ jwt);
}
}).done(function (response) {
//Response ok. process reuslt
}).fail(function (err) {
//Error during request
});
表格提交
通过表单提交,您无法控制浏览器设置的标题,因此无法设置Authorization
带有不记名令牌的标头。在这种情况下,您可以
-
Cookie:将 JWT 存储在将与表单数据一起发送的 cookie 中。您需要添加额外的安全性以避免 CSRF 附加
-
表单参数:JWT 存储在表单的隐藏字段中。
始终使用 POST(而不是 GET)以避免 JWT 缓存
Link
链接执行 GET 请求。您可以构建将 JWT 添加为查询参数的链接url?jwt=...
但是,请考虑这种情况下的安全风险。浏览器可以缓存该 url,并将其显示在日志中。如果攻击者有访问权限,他就有可能获得它们。用户还可以复制链接并在网络应用程序之外使用它(例如通过电子邮件发送......)
如果您使用cookie,则通过单击链接,令牌将自动发送到服务器,但这仅在用户经过身份验证时才有效。在这种情况下请注意 CSRF 漏洞