我正在开发小型REST服务,它应该支持客户端会话持久性。如您所知,由于REST,我们无法在服务器上存储任何客户端数据,数据必须存储在客户端,客户端的请求必须是自给自足的。那么......我们如何存储客户会话?通过互联网搜索我发现了一些如何实现这一点的方法。例如:我们向客户端发送包含客户端ID(缺口等)的加密令牌,如令牌= AES(id,secretKey);然后我们授权用户使用密钥在服务器上解密令牌的每个请求。任何人都可以提出建议吗?也许有另一种好方法可以做同样的功能。哪个加密算法更适合这个?谢谢。
答案 0 :(得分:8)
你提到了:
如您所知,由于REST,我们无法存储任何客户端数据 服务器,数据必须存储在客户端,客户端的请求必须 自给自足。
REST并未说您无法在服务器上存储客户端数据;它只是说你不应该存储应用程序状态,你可以将其视为“这个客户端正在尝试做什么”。
如果您主要尝试使用经过身份验证的用户的概念,那么标准登录Cookie将正常运行并且不会“不合适”。
答案 1 :(得分:2)
这一切都取决于你对这个问题的回答:为什么你首先需要一个“会话”概念?
如果您需要确保客户端传递代表一组凭据的cookie,请考虑让客户端将它们作为HTTPS身份验证标头传递给每个请求。
如果您需要遵循一些粘性路由规则(以确保将客户端的请求发送到特定服务器),请考虑利用此机会摆脱该架构式紧身衣,因为这是消除机会的最快方法未来的可扩展性。相反,让您的服务器选择任意。
如果您绝对必须路由到特定节点,请尝试要求客户端传递足够的标识数据,您可以使用它来散列或将客户端分散到特定的“泳道”。例如,您可以根据用户名进行拆分。