使用令牌而不是凭据进行远程登录 - 这是一个好主意


Remote login with token instead of credentials - is it a good idea?

我不是密码学家,如果我发现了别的东西,我可能不会尝试自己解决这个问题,那么你如何看待这种方法使用令牌而不是凭据从另一个站点远程登录到网站?

如果有人指出一个经过验证的解决方案,我实际上会很高兴,因为这只是另一个自制软件。

  • 站点A(我想登录)使用密码,例如d4ffa3793[...]392258e6a.

  • 站点
  • B(带有登录按钮的站点)也知道此代码。

  • 当我在站点 B 上单击"登录"时,B 会获取此密钥并使用 PHP 的 crypt 函数使用当前小时*的时间戳对其进行加密。

  • 访问者使用生成的令牌被发送到站点 A,其中站点 A 执行与站点 B 相同的操作来验证令牌。如果它们匹配,它将用户登录。

*我使用的是当前小时的时间戳,因为某些服务器的时间略有不同,并且在生成和验证令牌之间需要一段时间,

那么,这是怎么回事呢?你有什么建议?

多谢!

如果应用程序对安全不敏感(即即使有人想出如何利用交叉登录机制窃取其他用户的帐户,您也不会遇到大麻烦),那么我会像你说的那样处理它: 通过散列/加密用户名 + 时间戳 + 共享密钥来创建令牌,将令牌 + 明文用户名 + 明文时间戳发送到服务器 B(通过重定向 URL 中的 GET 参数), 在服务器 B 上验证正确性和新鲜度。

如果它是一个敏感的应用程序,我宁愿研究一些专业的SSO解决方案。

如果您选择自制解决方案,您应该注意的一件事是某些哈希(如 MD5)容易受到长度扩展攻击。此外,众所周知,crypt的语法很容易出错。