如何以安全的方式存储和使用从Twitter API v2获得的访问和刷新令牌?我不能只存储access_token和refresh_token,对吧?我需要某种标识符,并且可能将该标识符保存在客户机中。在这方面是否有任何建议的办法或最佳做法?如有任何指导,我将不胜感激。
6bc51xsx1#
这里有一些来自OWASP JWT for Java备忘录的信息(他们的示例代码是Javascript)。1.使用浏览器sessionStorage容器存储令牌,或者使用JavaScript闭包和私有变量1.在调用服务时,使用JavaScript将其添加为承载HTTP身份验证标头。1.将指纹信息添加到令牌。或(4).在浏览器sessionStorage中存储令牌的另一种方法是使用JavaScript私有变量或闭包。在这种方法中,对所有Web请求的访问都是通过一个JavaScript模块来路由的,该模块将令牌封装在一个私有变量中,只有从模块内部才能访问该变量。下面是实现示例。
/* Handle request for JWT token and local storage*/ function authenticate() { const login = $("#login").val(); const postData = "login=" + encodeURIComponent(login) + "&password=test"; $.post("/services/authenticate", postData, function (data) { if (data.status == "Authentication successful!") { ... sessionStorage.setItem("token", data.token); } else { ... sessionStorage.removeItem("token"); } }) .fail(function (jqXHR, textStatus, error) { ... sessionStorage.removeItem("token"); }); } /* Handle request for JWT token validation */ function validateToken() { var token = sessionStorage.getItem("token"); if (token == undefined || token == "") { $("#infoZone").removeClass(); $("#infoZone").addClass("alert alert-warning"); $("#infoZone").text("Obtain a JWT token first :)"); return; } $.ajax({ url: "/services/validate", type: "POST", beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "bearer " + token); }, success: function (data) { ... }, error: function (jqXHR, textStatus, error) { ... }, }); } function myFetchModule() { // Protect the original 'fetch' from getting overwritten via XSS const fetch = window.fetch; const authOrigins = ["https://yourorigin", "http://localhost"]; let token = ''; this.setToken = (value) => { token = value } this.fetch = (resource, options) => { let req = new Request(resource, options); destOrigin = new URL(req.url).origin; if (token && authOrigins.includes(destOrigin)) { req.headers.set('Authorization', token); } return fetch(req) } } ... // usage: const myFetch = new myFetchModule() function login() { fetch("/api/login") .then((res) => { if (res.status == 200) { return res.json() } else { throw Error(res.statusText) } }) .then(data => { myFetch.setToken(data.token) console.log("Token received and stored.") }) .catch(console.error) } ... // after login, subsequent api calls: function makeRequest() { myFetch.fetch("/api/hello", {headers: {"MyHeader": "foobar"}}) .then((res) => { if (res.status == 200) { return res.text() } else { throw Error(res.statusText) } }).then(responseText => console.log("helloResponse", responseText)) .catch(console.error) }
希望这对你有帮助!
1条答案
按热度按时间6bc51xsx1#
这里有一些来自OWASP JWT for Java备忘录的信息(他们的示例代码是Javascript)。
1.使用浏览器sessionStorage容器存储令牌,或者使用JavaScript闭包和私有变量
1.在调用服务时,使用JavaScript将其添加为承载HTTP身份验证标头。
1.将指纹信息添加到令牌。
或
(4).在浏览器sessionStorage中存储令牌的另一种方法是使用JavaScript私有变量或闭包。在这种方法中,对所有Web请求的访问都是通过一个JavaScript模块来路由的,该模块将令牌封装在一个私有变量中,只有从模块内部才能访问该变量。下面是实现示例。
希望这对你有帮助!