【发布时间】:2015-06-16 03:18:57
【问题描述】:
以下身份验证系统是否合理:
客户端使用用户名和密码向主服务器调用登录端点。主服务器将其发送到另一个身份验证服务器(不会收到进一步提及),如果这是有效的,它将返回是/否以及主服务器知道的用户 ID。如果是,则生成一个随机令牌(使用一些会吐出随机字符串的加密库),并存储其哈希值(使用 PHP 的 password_hash()),并在用户记录上保存 12 小时后的有效期。将令牌返回给客户端。
客户端现在将“授权:令牌 TOKEN+HERE+ABCD1234”添加到他们对其他端点的请求中。服务器确保 auth 标头中令牌的哈希值与数据库中的哈希值匹配(通过 PHP 的 password_verify() 使用盐),并且没有达到过期时间。如果不匹配,或者过期,则发回 401。
似乎至少与基本 HTTP 身份验证一样安全,后者只是在标头中包含 base-64 编码的 user:password?我考虑这个方案而不是基本的原因是主服务器不会存储身份验证服务器用于登录的用户名/密码。
我忘记了什么?这是非常不安全的吗?
【问题讨论】:
标签: php authentication token