会话管理:如何为 REST 服务生成身份验证令牌? (球衣)
Posted
技术标签:
【中文标题】会话管理:如何为 REST 服务生成身份验证令牌? (球衣)【英文标题】:Session management : How to generate Authentication token for REST service ? (Jersey) 【发布时间】:2011-06-25 19:10:23 【问题描述】:我正在尝试在我的 REST 服务中实现会话管理。我在冲浪时了解了这些准则:
不使用服务器端会话 - 它违反了 RESTful 原则。
使用 HTTP 基本身份验证 - 现在不可能,因为我被要求不要使用 SSL/TLS(这无疑是基本身份验证所需要的。)
使用 Http 摘要 - 我听说这会增加网络流量。这听起来很昂贵,尤其是当我的客户是移动设备时。
使用 cookie - 我被告知我不应该依赖 cookie 来保护我的重要资源,它们很容易被欺骗。另外,我阅读了有关通过 cookie 进行跨站点脚本攻击的文章。
我只能选择生成身份验证令牌,用户每次都必须发送 - 我承认这不是“完全”RESTful。
现在我需要知道,我应该如何生成这些在业务级别足够安全的唯一身份验证令牌?泽西岛有图书馆吗?我应该去 OAuth 吗?我刚刚阅读了一些关于它们的信息,它们对我有用吗?请记住,我的目标客户是移动设备——他们可以访问 OAuth 服务吗??
【问题讨论】:
【参考方案1】:为简单起见,我使用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 禁止代码。
【讨论】:
谢谢 limc !同时,我查看了 Java 的 SecureRandom 类。它比你的方法更可取吗? 在我看来,两者都可以正常工作...附加creationDate
确实使令牌与UUID
或SecureRandom
生成的密钥一起非常独特。重要的部分是 creationDate
供您检查 TTL。以上是关于会话管理:如何为 REST 服务生成身份验证令牌? (球衣)的主要内容,如果未能解决你的问题,请参考以下文章