【发布时间】:2014-08-16 04:01:11
【问题描述】:
这个问题在某种程度上与下面链接的问题有关。但是,我需要更清楚一些方面和一些额外的信息。参考: REST Web Service authentication token implementation
背景:
- 我需要使用令牌实现 REST Web 服务的安全性
- Web 服务旨在与 Java 客户端一起使用。因此,形成 凭据的身份验证和弹出窗口没有用。
- 我是 REST 安全和加密的新手
这是我到现在才明白的:
对于第一个请求:
- 用户建立 https 连接(或容器确保 https 使用 301)
- 用户将用户名和密码发布到登录服务
- 如果凭据有效,我们:
- 生成随机临时令牌
- 将随机令牌存储在服务器上,将其映射到实际用户名
- 使用只有服务器知道的对称密钥加密令牌
- 散列加密令牌
- 将加密的令牌和哈希发送给客户端
后续请求:
- 客户端发送此加密令牌和哈希组合(使用 基本用户名字段?)
- 我们确保加密的令牌不会使用哈希值被篡改,并且 然后解密
- 我们检查会话跟踪表中的解密令牌 未过期条目并获取实际用户名(过期待管理 通过代码?)
- 如果找到用户名,基于允许的角色,允许的操作 已配置
更多细节:
- 由于客户端是java客户端,所以第一个请求可以是POST 包含凭据。但是,这看起来可能会暴露 https 建立之前的凭据。因此应 对安全资源有一个虚拟 GET,因此 https 是 先成立?
- 假设上面是必需的,第二个请求是一个 LoginAction POST 有凭据。此请求是手动处理的(不使用 容器的授权)。对吗?
- 以上LoginAction返回给用户的加密组合 令牌 + 哈希
- 用户将其设置为 BASIC 身份验证使用的标头 机制(字段用户名)
- 我们实现一个 JAASRealm 来解密和验证令牌,并找到 允许的角色
- 授权过程的其余部分由容器处理 使用 web.xml 中定义的 WebResourceCollection
这是正确的方法吗?
【问题讨论】:
标签: java web-services security rest encryption