用于访问网页的基于密码的身份验证通常使用浏览器在向发送 cookie 的域发出请求时显示的 cookie。
当同一域中的不同页面需要单独的身份验证时,这可能会出现问题。如果您想对可以通过来自许多不同域的 Ajax 调用访问的服务实施身份验证,这也是一个问题。
我想到了一种实现身份验证的方法,它可以绕过这些限制,并且非常类似于浏览器支持的经典域/基于 cookie 的系统。我的问题是我的想法是否会增加安全风险,如果是的话是什么。
我建议的身份验证程序是,当页面首次加载时,应用程序会向用户显示登录/注册表格。
然后用户登录,Ajax 将他们的电子邮件和密码发送到服务器。如果它们与密码表中的一行匹配,则会生成一个不可猜测的令牌,并将其与密码表中的用户 ID (
uid
) 和时间戳一起存储在另一个数据库表中。 Ajax 响应现在是一条包含无法猜测的令牌的消息。客户端应用程序现在将变量的值(例如 sessionToken
)设置为不可猜测的令牌,并向用户显示指向站点受保护区域的链接。
随后的 Ajax 请求将包含
sessionToken
的值。 Ajax 处理程序将检查表,如果 sessionToken
存在,将获取用户的 uid
并使用它来从表中获取数据或将数据放入表中。 Ajax 处理程序还将生成一个新令牌并用它替换旧令牌,并将时间戳更新为当前时间。新的 sessionToken
将与任何其他数据一起发送回应用程序,因此下一个 Ajax 请求将包含新的 sessionToken
.
时间戳将用于限制
sessionToken
的有效期,如果过期则需要重新认证。
对这种方案的安全性有任何想法将不胜感激。