会话管理:如何为REST服务生成身份验证令牌? (新泽西州)

时间:2011-02-11 20:00:44

标签: security session rest oauth jersey

我正在尝试在我的REST服务中实现会话管理。我在冲浪时了解了这些指南:

  1. 不使用服务器端会话 - 它违反了RESTful原则。

  2. 使用HTTP基本身份验证 - 现在不可能,因为我被要求不使用SSL / TLS(毫无疑问需要Basic身份验证。)

  3. 使用Http摘要 - 我听说这会增加网络流量。这听起来很昂贵,尤其是当我的客户端是移动设备时。

  4. 使用cookies - 我被告知我不应该依赖cookie来保护我的重要资源,它们很容易被欺骗。另外,我通过cookie了解了跨站点脚本攻击。

  5. 我有一个生成身份验证令牌的选项,用户每次都必须发送 - 我承认这不是“完全”RESTful。

  6. 现在我需要知道,我应该如何生成这些唯一的身份验证令牌,这些令牌在业务级别上足够安全?泽西岛有一些图书馆吗?我应该去OAuth。我刚刚读了一些关于它们的内容,它们对我来说有用吗?请记住,我的目标客户端是移动设备 - 他们可以访问OAuth服务吗?

1 个答案:

答案 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禁用代码。