新手刚做注册登录功能,使用token进行权限管理,个人感觉没必要啊,新手,求教
发布于 6 年前 作者 ailuhaosi 5273 次浏览 来自 问答

若别人没有我的用户名、密码,那我的账号自然安全,用不用token都安全。 若别人有了我的用户名、密码,用了token也还是一样,别人还是能登录,用不用token都不安全。 总结:从上面两点来看,账号的安全与token没什么关系,关键是用户名、密码是否被窃取。 所以我认为token不是没必要么。下面有我使用token的方法,不知对不对。

使用token步骤: 1.判断用户名密码是否正确 2.若正确则生成token发送到客户端。生成token如下: const secret = ‘aaa’; //撒盐:加密的时候混淆 user.token = jwt.sign(user.toJSON(), secret, { expiresIn: 60 * 60 * 5 //5小时到期时间 }); //process.env.JWT_SECRET 3.客户端保存token到cookie里面,客户端需要访问授权页面时,把token加到ajax的headers里面。 4.根据客户端传来的token进行解码,如下: jwt.verify(bearerToken, ‘aaa’, function (err, decoded) { if (!err) { console.log(‘decoded=’ + decoded.username +’;;’+decoded.password); //如果超时,则有错误。 req.body.username = decoded.username; req.body.password = decoded.password; } })

6 回复

token 可以用来维持会话,尤其是前后端分离时

  1. 没有 token 或者 session,你用什么来保持会话啊,每次请求都带上账号密码吗
  2. 不是所有应用都是账号密码登录的。

JWT从来都是和session认证做比较,而不是和「不用token」做比较。

JWT最大的优势在于无状态,不会像session一样需要在后端维持一个session状态。

这种优势在跨端的时候尤其明显。

用户名和密也是广义上的 token,而程序生成的 token ,主要是为了

  • 避免在信息被窃取的时候可能的其他损失,想象一下如果每次带上用户名和密码,万一这些信息被中间人窃取,那如果用户在其他网站也使用这些密码,那么其他网站帐号就很危险了
  • 另外生成 token 还可以额外保存一些信息,用户的 id,ttl 这些来方便其他目的

抛开session、jwt与token的关系(实际上没卵关系),我认为使用token相比直接使用账号密码的优点:

  • 相对安全,如果使用账号密码,出现一次被窃取就必须改密码才能防止恶意攻击,而token往往有有效期(越敏感,有效期越短),这样可降低被窃取带来的损失
  • 有些认证过程并不是账号密码,可能是证书、验证码等形式,这时使用token可以避免频繁验证
  • 间接授权优势,比如某人在我电脑上登录一个账号查看东西,每次都传账号密码,等他走后我可能破解他的账号密码

token本身只是一个概念,直译成“令牌”很恰当,它是授权的一种通用方式,用户登录如果使用token,我们可以这样形容:“账号所有者,授权某某(token)具有系统暂时的访问权限”,如果直接使用账号密码仿佛是说:“我是账号所有者,所以我能访问xxx”,前者比后者要灵活。

没有对错,搞清楚本质并权衡利弊,然后自己做决定。

这个要看token的生成规则是什么样子的,并且如果账号要求允许多端登录的话,不同时间,不同端登录按理来说生成的token都是不一样的,token跟用户应该是一个多对一的关系,并且还是会变得那种。个人感觉,可以从用户名,密码拿到token,但是无法从token拿到账户名以及密码,所以在前后端分离的时候,用token安全性还是有的。

回到顶部