我一直在研究RESTful身份验证,我仍然无法得到一个非常明确的想法,我如何设计我的Web架构!我有很多问题没有答案..
我希望我的API也可以用于移动和网络,我使用的是Express v4
我不想使用基本身份验证,因为许多帖子建议作为一个简单的出路,或者我可以使用Passport中间件,但我想使用基于令牌的身份验证或类似或更好的东西,我想进行我的身份验证,所以我可以更好地理解,但我不知道我该怎么做,或者如果我理解清楚的话!
我将在下面简化我的预期身份验证架构:
将用户名和密码发布到服务器(我知道如果你想保证连接安全是使用https连接,否则我会公开我的凭据,或者除了https之外还有其他任何选项?否则我将需要使用公共和私钥与时间戳和哈希我的凭据发送到服务器??,我该怎么办?或其他更好的选择?)
使用salt cryptography对密码进行哈希处理,并存储哈希密码和salt,然后生成令牌ID并发送给客户端!并且令牌ID存储在会话中或使用REDIS数据库???
是不是使用会话再次违反REST ??? 但是,如果我不使用会话,我如何存储令牌ID并将其与客户端进行比较???
从现在开始我有令牌ID,我怎样才能存储在我的客户端?
现在,我有令牌ID,每次我想向服务器发出请求时,我都会将其放在授权标头中.
收到请求后,服务器将检查令牌API,并将其与会话令牌进行比较,如果为true,请求允许否则拒绝
这是Express应用程序授权的标准方法吗?
我很遗憾这篇冗长的帖子,但我觉得我应该掌握认证和授权,因为它很重要!我希望有人可以纠正我对REST authenticatino的误解并回答我的问题或建议我更好的方法来做到这一点!
我使用Node与Express.js并尝试使用JWT进行身份验证,在用户登录后生成一个令牌,并将其保存到localstorage,但后来我不知道如何获取身份验证令牌.这是我正在使用的代码:
登录视图:
$.ajax({
type: 'POST',
url: base_url + "login",
data: postData,
dataType: 'json',
success: function(data){
// console.log(data1);
// alert(data);
_(data);
if(data.success === false){
showError(data.msg);
}else{
showError(data.msg);
window.localStorage.setItem("authToken", data.token);
var token = window.localStorage.getItem('authToken');
if (token) {
$.ajaxSetup({
headers: {
'x-access-token': token
}
});
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是在访问任何路由之前用于检查的路由认证:
router.use(function(req, res, next){
var token = req.headers['x-access-token'];
console.log(token);
if (token) {
// verifies secret and checks exp
jwt.verify(token, app.get('superSecret'), function(err, decoded) {
if (err) {
return res.json({ success: false, message: 'Failed to authenticate …Run Code Online (Sandbox Code Playgroud) 如何比较 FormData 对象,我试图在发送 ajax 请求之前检查表单是否已更改。
但似乎无法比较对象。有什么方法可以将其转换为 js Object 或优雅的方式吗?
let a = new FormData()
let b = new FormData()
console.log(a === b ) // returns false
Run Code Online (Sandbox Code Playgroud)