简单的令牌式身份验证

时间:2015-06-16 03:18:57

标签: php authentication token

以下身份验证系统是否合理:

  1. 客户端使用用户名和密码将登录终点调用到主服务器。主服务器将其发送到另一个认证服务器(将不再提及),如果这是有效的,则返回yes / no,以及主服务器知道的用户ID。如果是,则生成随机令牌(使用一些吐出随机字符串的加密库),并存储此散列(使用PHP的密码_hash()),并在此后的12小时内将用户记录存储到期。将令牌返回给客户端。

  2. 客户现在添加"授权:Token TOKEN + HERE + ABCD1234"他们对其他终端的请求。服务器确保auth头中令牌的哈希值与数据库中的哈希值匹配(使用salt通过PHP' s密码_verify()),并且到期时未达到目标。如果它不匹配,或超过期限,则发回401。

  3. 至少和基本的HTTP身份验证一样安全,它只有base-64编码的用户:标头中的密码?我之所以考虑这个方案,是因为主服务器不会存储认证服务器用来登录的用户名/密码。

    我忘记了什么?这是非常不安全吗?

2 个答案:

答案 0 :(得分:3)

您的方案与标准服务器端会话没有什么不同,其中SESSION-ID通常只是一个随机令牌并存储在cookie中的客户端,有两项改进:

  • 您可以使用授权标头来提供令牌,而不是Cookie。这可以作为CSRF保护。
  • 您可以在服务器端散列令牌。如果有人可以访问服务器端的令牌存储,这有助于防止会话劫持。

答案 1 :(得分:2)

如果您看到Google的oAuth流程,那么您将了解授权如何为他们工作。

enter image description here

他们有不同的授权和API调用服务器。用户将身份验证详细信息发送到授权服务器并接收代码。 Google正在获取用户同意访问详细信息的过程,但您可以跳过此过程以获得同意,并只返回成功详细信息的代码。

此代码可用于从API服务器获取访问令牌。因此,您对API服务器的第一个请求是获取访问令牌。 Google也有能力刷新您的访问令牌。

对API服务器的所有后续请求必须包含访问令牌。因此,您似乎错过了此代码交换过程,以使其更安全。

更多信息:https://developers.google.com/identity/protocols/OAuth2

相关问题