Java web服务中的安全认证

Java web服务中的安全认证,java,web-services,ws-security,Java,Web Services,Ws Security,我正在使用SpringFrameworkforJava开发一个web服务,并部署在JBossAS上。此web服务需要身份验证、授权和安全解决方案,以便某些方法用户A可以执行,而另一些用户B可以执行。在客户端,将有一个应用程序调用web服务,人们可以使用用户帐户A或B登录 我一直在挖掘Internet,搜索web服务身份验证,研究WS-Security,但我所看到的只是使用WS-Security。WS-Security通常提供4种身份验证: 用户名令牌 X.509代币 SAML令牌 Kerber

我正在使用SpringFrameworkforJava开发一个web服务,并部署在JBossAS上。此web服务需要身份验证、授权和安全解决方案,以便某些方法用户A可以执行,而另一些用户B可以执行。在客户端,将有一个应用程序调用web服务,人们可以使用用户帐户A或B登录

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

  • 用户名令牌
  • X.509代币
  • SAML令牌
  • Kerberos令牌
但是所有这些东西通常都是预先配置的,我没有发现任何例子表明我应该在web服务中提供登录/注销方法(通过使用有状态web服务)。注意,如果我们使用登录方法,那么即使底层是SSL传输,也存在安全风险

所以我的问题是:

  • 我应该做些什么来满足我的要求
  • 如果使用UsernameToken或Kerberos令牌。。。我们为每个用户提供一些特权,即授权,然后对于每个传入的请求,我们必须获得用户信息并获得其所有特权。这个过程似乎需要时间,并且会降低系统的性能。你同意吗?所以我想这是不推荐的
  • 我非常感谢你的任何回应,并将投票支持任何合理的答案

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

  • 若你们在讨论系统的性能,看看SAML。SAML是一个签名的XML文档,其中包含客户端的authN和authZ,这意味着您不需要在服务器上循环客户端的authN和authZ


  • 您的场景与您的场景相似

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

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

    我的系统是端到端解决方案。在客户端,可能有许多用户使用同一台计算机,每个用户具有不同的权限。所以我认为应该向客户端提供“登录”方法,尽管在互联网上很少提及。