我尝试过类似website link的基于令牌的身份验证。
对我来说很好。但是我有两个问题
添加以下代码后,它将检查来自客户端的每个请求并验证用户。如果成功,它将返回一些数据,否则,将显示未授权。
但是问题是,我登录( http://localhost:49501/Home )后,仅在相同的浏览器选项卡上显示成功 ( http://localhost:49501/Home/Data )。
但是我登录(Tab1)并尝试访问相同的URL( http://localhost:49501/Home/Data )之后,但是在使用相同的Chrome浏览器的另一个标签(tab2)上,它显示取消授权错误
Data.cshtml
var authHeaders = {};
authHeaders.Authorization = 'Bearer ' + sessionStorage.setItem('accessToken');
$.ajax({
url: "http://localhost:49501/api/values",
type: "GET",
headers: authHeaders,
success: function (response) {
console.log('Success');
}
});
- 使用AJAX发送令牌真的安全吗?因为所有代码都出现在客户端。
答案 0 :(得分:1)
您的代码中有一个问题,我可以在行中看到:
authHeaders.Authorization = 'Bearer ' + sessionStorage.setItem('accessToken');
sessionStorage.setItem
方法具有两个必填参数,并且给出错误,如果没有它,执行此操作时,开发人员控制台中必须存在一些js错误。 sessionStorage的正确用法是:
// Save data to sessionStorage
sessionStorage.setItem('key', 'value');
// Get saved data from sessionStorage
let data = sessionStorage.getItem('key');
// Remove saved data from sessionStorage
sessionStorage.removeItem('key');
// Remove all saved data from sessionStorage
sessionStorage.clear();
该想法是使用在有限时间内有效的用户凭据在服务器上生成一些accessToken。优点是,您可以使用authToken授权后续请求,直到它有效为止,并且您无需存储用于授权每个请求的真实用户名和密码。此外,如果会话处于活动状态的时间更长,还可以通过添加一些刷新安全令牌的机制来防止用户注销/重新授权请求。
为消除安全隐患,不会保存真实的用户凭据,并且身份验证令牌的时间有效性有限。例如,如果您的安全令牌的有效期为30分钟,如果用户在非活动会话30分钟后离开了计算机,则该令牌将无法使用。
您还可以每隔几分钟在会话中重新生成安全令牌,并在后台更新会话存储以进一步提高安全性。另外,如果机器是私有的,那么将它们保存在本地机器上并不是很不安全,但是对于公共机器,我们还可以确保在注销/超时时清除所有会话存储,如果保留,那么令牌也会在一段时间后过期。 / p>
希望有帮助