我正在使用 Java 的 Spring 框架开发 Web 服务并部署在 JBoss AS 上。此 Web 服务需要身份验证和授权以及安全解决方案,以便用户 A 可以执行某些方法,而其他用户 B 可以执行某些方法。在客户端,将有一个应用程序调用 Web 服务,人们可以使用用户帐户 A 或 B 登录。
我一直在挖掘 Internet,搜索 Web 服务身份验证,研究 WS-Security,但我所看到的只是使用 WS-Security。 WS-Security 通常提供 4 种身份验证:
- 用户名 token
- X.509 token
- SAML token
- Kerberos token
但所有这些通常都是预先配置的,我找不到任何示例建议我应该在 Web 服务中提供登录/注销方法(通过使用有状态的 Web 服务)。请注意,如果我们使用登录方法,那么即使底层是 SSL 传输,也存在安全风险。
所以我的问题是:
- 我应该怎么做才能满足我的要求?
- 如果使用 UsernameToken 或 Kerberos Token ...,并且我们为每个用户提供一些权限,即授权,那么对于每个传入请求,我们必须获取用户信息并获得其所有权限。此过程似乎需要时间并降低系统性能。你同意?所以我想这是不推荐的?
非常感谢您的任何回复,并将投票给任何合理的答案。
最佳答案
您的场景反射(reflect)了 EBay Trading API's 的场景.
基本上,它的工作原理如下。
- 提供初始 WS 调用(Ebay 案例:FetchToken)以确认用户身份并返回授权 key (每个登录用户的唯一 key )。将授权 key 与用户配置文件信息一起存储在缓存/分布式缓存中。
- 任何后续调用都需要客户端传递授权 key 以及调用数据。您将使用授权 key 获取用户个人资料信息。
- 提供注销 WS 调用。这会使授权 key 无效。
为了安全起见,所有 WS 调用都应该通过 SSL 进行。
关于java - Web 服务中的安全身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6952416/