我正在尝试制作网站的后端 API(我想让后端独立于前端,所以我现在只制作服务器端 API,尽可能遵守 RESTful)。我以前没有这样做过,所以我不知道“最好”和最安全的做事方式。
我现在怎么做:
API 的某些部分只能在特定用户登录后和最多 24 小时后访问。
为此,每当用户登录时,我都会在服务器端生成一个随机会话 ID(我使用的是无密码登录,因此当用户单击电子邮件中的链接时会分配该 ID),服务器端会通过发送该 ID 来响应客户端一次的会话 ID。然后,客户端将此会话 ID 存储在本地存储中(如果客户端不是 Web 浏览器,则存储在磁盘中的文件)。
接下来,我将该 ID 与关联的电子邮件一起存储在服务器端的数据库(MySQL 表)中。
现在,每次客户端想要从我的 API 中获取某些东西时,他们都必须在 URL 中提供电子邮件和会话 ID(我现在不需要 cookie),服务器会检查数据库中的那些,如果它们存在,那么服务器完全响应,否则响应错误。
24 小时后,服务器删除电子邮件/会话 ID 对,用户必须再次登录(以生成另一个会话 ID 并将其与他们的电子邮件相关联)。
现在的问题:
我的方法是安全的还是有明显的漏洞?还有另一种我不知道的经过实战考验的方式吗?
客户端是否有更好的方法来存储会话 ID(如果它们是 Web 浏览器)?
生成唯一会话 ID 的最佳方法是什么?目前我生成了一个随机的 16 字符字符串,我将其设置为会话电子邮件表的主键。
使用 MySQL 表是存储会话 ID 的最高性能/最佳方式吗(假设每个请求都会查询它)?
我是否需要以任何方式加密会话 ID?客户端将其作为“裸”URL 参数发送是否安全?
很抱歉在一篇文章中有太多问题,但我认为它们与上述单一场景有关。如果有什么不同,我正在使用 F#,我希望我的客户端是一个 android 应用程序或一个 Web 应用程序。