我正在尝试在 REST 服务中实现 session 管理。我在冲浪时了解到这些准则:
不使用服务器端 session - 它违反了 RESTful 原则。
使用 HTTP 基本身份验证 - 目前不可能,因为系统要求我不要使用 SSL/TLS(这无疑是基本身份验证所必需的。)
使用 Http 摘要 - 我听说这会增加网络流量。这听起来成本很高,尤其是当我的客户端是移动设备时。
使用 cookie - 我被告知永远不应该依赖 cookie 来保护我的重要资源,它们很容易被欺骗。另外,我还了解到有关通过 cookie 进行跨站点脚本攻击的内容。
我可以选择生成身份验证 token ,用户每次都必须发送该 token - 我承认这不是“完全”RESTful。
现在我需要知道,我应该如何生成这些在业务级别足够安全的唯一身份验证 token ? Jersey 有图书馆吗?我应该选择 OAuth..我刚刚读了一些有关它们的内容,它们对我的情况有用吗?请记住,我的目标客户端是移动设备 - 他们可以访问 OAuth 服务吗?
最佳答案
为了简单起见,我使用 UUID
生成自己的身份验证 token 在用 Jasypt 加密整个 token 之前:-
String key = UUID.randomUUID().toString().toUpperCase() +
"|" + someImportantProjectToken +
"|" + userName +
"|" + creationDateTime;
StandardPBEStringEncryptor jasypt = new StandardPBEStringEncryptor();
...
// this is the authentication token user will send in order to use the web service
String authenticationToken = jasypt.encrypt(key);
key 包含creationDateTime
,以便我可以使用它来验证生存时间。这样,如果用户在 X 分钟后使用相同的身份验证 token ,它将不再起作用,我将发回 403 禁止代码。
关于security - session 管理 : How to generate Authentication token for REST service ?( Jersey ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973454/