security - session 管理 : How to generate Authentication token for REST service ?( Jersey )

标签 security session rest oauth jersey

我正在尝试在 REST 服务中实现 session 管理。我在冲浪时了解到这些准则:

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

  2. 使用 HTTP 基本身份验证 - 目前不可能,因为系统要求我不要使用 SSL/TLS(这无疑是基本身份验证所必需的。)

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

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

  5. 我可以选择生成身份验证 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/

相关文章:

java - 使用 TripleDES 加密时将初始化 vector (IV) 附加到加密字节

javax.net.ssl.SSLHandshakeException : Unsupported curveId: 29

java - 短路评估可以触发竞争条件吗?

php - 需要关闭 session 的数据库连接

java - HttpSession 的 setAttribute ("attributename",object) 对象会存放在哪里?

java - 用于网络错误处理的 Jersey API

java - 将密码作为字符数组发送到休息模板

security - 启用 HSTS 后是否可以从非安全连接重定向到安全连接?

asp.net - 在aspx页面中设置 session 值

java - Tomcat 7,Spring rest 模板应用程序在浏览器中生成 err_invalid_chunked_encoding