【问题标题】:How generation and validation process works for secure token authentication?生成和验证过程如何用于安全令牌身份验证?
【发布时间】:2014-02-20 01:42:45
【问题描述】:
我正在比较 cookie 与 token 身份验证。我对cookie auth 相当熟悉,但我需要了解token auth 的工作原理。
据我了解
- 用户使用用户名和密码登录
- 服务器获取数据并检查用户名和密码是否匹配
- 如果匹配,使用类似 SHA256 的算法生成令牌?
- 向用户发送令牌
- 用户使用令牌和其他数据发送请求以访问受限数据?
- 服务器使用其他数据和哈希方法来检查令牌?
我感到困惑的是3、5 和6,令牌生成部分。
- 对于
3,您将哪些数据放入散列,它只是散列还是存在
更多的流程?
- 对于
5,如果使用令牌发送任何其他数据怎么办?
- 对于
6,发送的数据如何用于验证令牌?
- 如何判断令牌是否已过期?
【问题讨论】:
标签:
authentication
token
access-token
【解决方案1】:
对于 3,您将哪些数据放入散列,它只是散列还是过程中还有更多?
无论你真正喜欢什么。实施细节只是您关心的问题。基本上,令牌是一个随机字符串(加密、散列与否)......同样,这取决于您要如何实现它。但是,请始终确保令牌在整个系统中是唯一的,并且系统可以使用它来有效地识别用户及其范围
对于 5,如果任何其他数据与令牌一起发送怎么办?
我不太确定您还需要发送什么,但由于我上面提到的,通常您不必发送任何其他内容...访问令牌必须描述用户(或设备,或其他)及其在系统内的范围。那么,你为什么还要费心发送额外的信息呢?
对于6,发送的数据如何用于验证令牌?
再一次,这取决于你。其他数据可能是用户的电子邮件地址或用户 ID,然后您的系统可以将用户 ID(或电子邮件)与访问令牌匹配。但是,这不是强制性的,您可以随意实现它。
如何判断令牌是否已过期?
好吧,如果您的系统发出临时访问令牌,希望它会跟踪访问令牌的创建时间,然后根据创建确定访问令牌是否已过期。那是从服务器端。例如,以最简单的形式,您可以拥有一个存储访问令牌的数据库表,其中包含以下列:
- 访问令牌:唯一字符串
- UserId:相关的用户id
- 创建日期:UTC 时间
这就是让它工作所需的一切,当然,通常你会想要提供更强的安全性,并且这个表会更大。