使用REST API和Javascript客户端,如何在页面刷新后保持登录

Using a REST API and a Javascript client, how to stay logged in after a page refresh?

本文关键字:刷新 登录 API REST Javascript 客户端 使用      更新时间:2023-09-26

目前,我的身份验证流程如下:

  1. 用户在客户端浏览器应用程序(准确地说是AngularJS)中填写登录表单,用户名和密码存储在浏览器的内存中(纯Javascript变量)。

  2. 访问受保护的API资源时,请求将使用存储在内存中的凭据通过SSL上的HTTP基本身份验证进行身份验证。

问题是,当用户刷新页面时,她的凭据将被删除,她需要再次登录。我是不是遗漏了一些显而易见的东西?

到目前为止,我发现的几个解决方案:

  1. 将用户名和密码存储到cookie中:即使使用安全cookie和/或加密,这似乎也不安全。

  2. 使用会话cookie:这似乎违反了RESTful的无状态原则。

(我想OAuth在客户端安全存储访问令牌方面也有同样的问题?)

会话cookie在这里完全可以。一旦安装好,你不在乎它们,浏览器会通过标题将它们与每个请求一起发送。

受这个答案的启发,我最终做了这样的事情(链接打开了一张相当大的图片)。

简言之,客户端将访问令牌存储在javascript变量中,但刷新令牌存储在服务器端会话中(在托管客户端应用程序的服务器上,而不是API服务器上)。