我已经阅读了一些关于令牌认证的内容,但有一点我不明白。我想如果用户使用他的密码登录(通过https)我生成一个随机令牌(带有'md5(随机+时间戳)'?)和一个过期日期并将其放入数据库中。现在,每次请求(也通过https?),用户都可以发送令牌,如果有用户使用该令牌并登录该用户,我会检查数据库。 现在我已经读过一些令牌包含用户名和用公钥/私钥算法加密的时间戳。我不明白的原因是什么。我在我的数据库中有令牌,并将其与用户发送给我的令牌进行比较。如果他更改了令牌,我找不到具有该令牌的用户,因此它是一个无效的令牌。我没有看到为什么我必须以不同的方式检查令牌的有效性?谢谢!
答案 0 :(得分:0)
哈希不是加密:Fundamental difference between Hashing and Encryption algorithms
您无需将令牌存储在服务器上。客户端必须存储它(本地/会话存储)并使用https重新发送它。令牌的正文/有效负载具有userId,名称或电子邮件甚至角色/权限等声明。为什么需要此信息?因为对于每个ressource请求,您必须在服务器端确保允许客户端通过检查令牌中的声明数据来执行当前操作。
您验证令牌的真实性,一些坏人(您的https连接中间人受到攻击)修改了令牌。这可以通过签署令牌来完成。看一下json网络令牌:http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html