我不是密码学家,如果我找到其他东西,我可能不会尝试自己解决这个问题,那么您如何看待这种方法使用令牌而不是凭据从其他站点远程登录网站?
如果有人指出一个经过验证的解决方案,我真的很高兴,因为这只是另一个自制软件。
网站A(我想登录)使用密码,例如d4ffa3793 [...] 392258e6a。
网站B(带登录按钮的网站)也知道此代码。
当我点击网站B上的“登录”时,B接受此秘密并使用PHP的加密功能以当前小时*的时间戳加密它。
访问者使用生成的令牌发送到站点A,其中站点A与站点B执行相同的操作以验证令牌。如果匹配,则会将用户登录。
*我正在使用当前时间的时间戳,因为某些服务器的时间略有不同,并且在生成和验证令牌之间需要一段时间,
那么,这是怎么回事?你会建议什么?
非常感谢!
答案 0 :(得分:0)
如果应用程序不是安全敏感的(即使有人弄清楚如何利用交叉登录机制来窃取另一个用户的帐户,你也不会遇到大麻烦)那么我会处理它就像你说的:通过哈希/加密用户名+时间戳+共享密钥创建一个令牌,将令牌+明文用户名+明文时间戳发送到服务器B(通过重定向URL中的GET参数),在服务器B上验证正确性和新鲜度。
如果它是一个敏感的应用程序,我宁愿研究一些专业的SSO解决方案。
如果您选择自制解决方案,您应该注意的一点是某些哈希(如MD5)对length extension attacks的漏洞。此外,crypt
的语法很容易出错。