我不明白在身份验证中拥有访问令牌的意义。下面是我采取的一段解释,但我仍然感到困惑。由于每个api调用仍然转到数据库查找令牌,因此对每个http请求的用户名和密码的不同检查是什么?
而不是强制客户端发送每个用户名和密码 请求你有一个" get_access_token"在RESTful中运行 获取用户名和密码并以a响应的服务 令牌,这是一种独特的加密哈希值 与之相关的一些到期日。这些令牌存储在 每个用户的数据库。然后客户端发送访问令牌 后续请求。然后将验证访问令牌 数据库而不是用户名和密码。
答案 0 :(得分:1)
使用访问令牌可以限制用户名和密码在线路上使用和发送的时间。
您希望存储和传输您的用户名和密码,SSN或其他敏感数据的次数是多少?你是否想在每次请求时都这样做?
答案 1 :(得分:1)
首先,通常通过检查数字签名来验证访问令牌,这不需要接收服务与发布服务器通信。客户端获取一次访问令牌并使用它直到它过期。
但即使在每次调用时都必须针对数据库检查令牌(例如,当使用引用令牌时),令牌仍优先于每次调用时发送用户名和密码。它们消除了客户端将密码保存在内存(或其他地方)的需要,因为密码很容易被盗。
答案 2 :(得分:0)
(1)访问令牌不如您的密码敏感。访问令牌通常在短时间后过期(这是Oauth威胁模型中的要求),而密码往往是长期的。如果有人抓住你的访问令牌,他们可以做的伤害有限。如果他们抓住你的密码,那么他们可以做很多伤害。特别是如果您在多个站点上使用相同或相关的密码。
(2)如果服务器安全地实施了密码验证,那么他们应该使用慢功能,如PBKDF2,bcrypt或scrypt来验证您的密码。这些函数设计得很慢,因此如果有人访问数据库,他们将无法撤消许多密码:请参阅Our password hashing has no clothes。鉴于密码检查应该很慢,我们不想经常这样做!然而,访问令牌的验证要快得多。
(3)授予您访问资源的系统("资源提供者")可能与检查您的身份的系统不同("身份提供者")。例如,许多网站(包括StackOverflow)允许您使用您的Gmail帐户登录。在这种情况下,Google是身份提供者,StackOverflow是资源提供者。您真的想要向StackOverflow提供您的Gmail密码吗?我希望不会。