Web服务中的安全身份验证

时间:2011-08-05 06:42:35

标签: java web-services ws-security

我正在使用Spring框架Java开发Web服务并在JBoss AS上部署。此Web服务需要身份验证和授权以及安全解决方案,以便某些方法用户A可以执行,而其他一些用户B可以执行。在客户端,将有一个应用程序调用Web服务,人们可以使用用户帐户A或B登录。

我一直在挖掘互联网,搜索Web服务身份验证,研究WS-Security,但我能看到的只是使用WS-Security。 WS-Security通常提供4种身份验证:

  • 的UsernameToken
  • X.509令牌
  • SAML令牌
  • Kerberos Token

但所有这些事情通常都是预配置的,我找不到任何建议我应该在Web服务中提供登录/注销方法的示例(通过使用有状态的Web服务)。请注意,如果我们使用登录方法,那么即使基础是SSL传输,也存在安全风险。

所以我的问题是:

  1. 我应该怎样做才能满足我的要求?
  2. 如果使用UsernameToken或Kerberos Token ...并且我们为每个用户提供一些权限,即授权,那么对于每个传入请求,我们必须获取用户信息并获得其所有权限。这个过程似乎需要时间并且会降低系统的性能。你同意吗?所以我猜这不推荐?
  3. 我非常感谢你的回复,并会投票给任何合理的答案。

2 个答案:

答案 0 :(得分:2)

您的方案与EBay Trading API's的方案相同。

基本上,它的工作原理如下。

  1. 提供一个初始WS调用(Ebay case:FetchToken),它确认用户的身份并返回授权密钥(每个登录用户的唯一密钥)。将授权密钥与用户配置文件信息一起存储在缓存/分布式缓存中。
  2. 任何后续呼叫都要求客户端传递授权密钥以及呼叫数据。您将使用授权密钥获取用户配置文件信息。
  3. 提供注销WS调用。这使授权密钥无效。
  4. 为了安全起见,所有的WS调用都应该通过SSL进行。

答案 1 :(得分:1)

  1. 如果您的服务是点对点的,那么ssl就足够了。 Mutual ssl(Mutual_authentication)广泛用于客户端authN和authZ。

  2. 如果你就系统性能发表演讲,请看SAML。 SAML是一个签名的XML文档,其中包含客户端的authN和authZ,这意味着您无需在服务器上循环以获取客户端authN和authZ。