我正在尝试在我的REST服务中实现会话管理。我在冲浪时了解了这些指南:
不使用服务器端会话 - 它违反了RESTful原则。
使用HTTP基本身份验证 - 现在不可能,因为我被要求不使用SSL / TLS(毫无疑问需要Basic身份验证。)
使用Http摘要 - 我听说这会增加网络流量。这听起来很昂贵,尤其是当我的客户端是移动设备时。
使用cookies - 我被告知我不应该依赖cookie来保护我的重要资源,它们很容易被欺骗。另外,我通过cookie了解了跨站点脚本攻击。
我有一个生成身份验证令牌的选项,用户每次都必须发送 - 我承认这不是“完全”RESTful。
现在我需要知道,我应该如何生成这些唯一的身份验证令牌,这些令牌在业务级别上足够安全?泽西岛有一些图书馆吗?我应该去OAuth。我刚刚读了一些关于它们的内容,它们对我来说有用吗?请记住,我的目标客户端是移动设备 - 他们可以访问OAuth服务吗?
答案 0 :(得分:38)
为简单起见,我使用UUID
生成我自己的身份验证令牌,然后使用Jasypt加密整个令牌: -
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);
密钥包含creationDateTime
,以便我可以使用它来验证生存时间。这样,如果用户在X分钟后使用相同的身份验证令牌,它将不再起作用,我将发回403禁用代码。