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

我正试图在我的REST服务中实现会话pipe理。 在冲浪的时候我开始了解这些指南:

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

  2. 使用HTTP基本身份validation – 现在不可能,因为我被要求不使用SSL / TLS(基本身份validation无疑是必需的)。

  3. 使用Http摘要 – 我听说这增加了networkingstream量。 这听起来成本很高,特别是当我的客户端是移动设备时。

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

  5. 我留下了一个生成身份validation令牌的选项,用户每次都必须发送 – 我承认这不是“完全”RESTful。

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

为了简单起见,我使用UUID生成自己的身份validation令牌,然后使用Jasyptencryption整个令牌:

 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以便我可以使用它来validation生存时间。 这样,如果用户在X分钟后使用相同的身份validation令牌,它将不再工作,我将发回一个403禁止的代码。