java - Web 服务中的安全身份验证

标签 java web-services ws-security

我正在使用 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 传输,也存在安全风险。

所以我的问题是:

  1. 我应该怎么做才能满足我的要求?
  2. 如果使用 UsernameToken 或 Kerberos Token ...,并且我们为每个用户提供一些权限,即授权,那么对于每个传入请求,我们必须获取用户信息并获得其所有权限。此过程似乎需要时间并降低系统性能。你同意?所以我想这是不推荐的?

非常感谢您的任何回复,并将投票给任何合理的答案。

最佳答案

您的场景反射(reflect)了 EBay Trading API's 的场景.

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

  1. 提供初始 WS 调用(Ebay 案例:FetchToken)以确认用户身份并返回授权 key (每个登录用户的唯一 key )。将授权 key 与用户配置文件信息一起存储在缓存/分布式缓存中。
  2. 任何后续调用都需要客户端传递授权 key 以及调用数据。您将使用授权 key 获取用户个人资料信息。
  3. 提供注销 WS 调用。这会使授权 key 无效。

为了安全起见,所有 WS 调用都应该通过 SSL 进行。

关于java - Web 服务中的安全身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6952416/

相关文章:

c# - 如何将 WCF 配置为仅签署 TimeStamp header

java - org.hibernate.MappingException : Repeated column in mapping for entity:. ..column:added_by(应使用 insert ="false"update ="false"进行映射)

java - 使用 C3P0 的 JDBC 连接池

java - 与 Guice 一起 Swing

vba - 从 Excel VBA 将巨大数据集发布到 Web 服务

c# - 仅使用服务证书的 WCF 消息安全性

wcf - 通过 channel 接口(interface)支持消息级安全性的最小客户端

java - 我们可以制作一个用作计算机鼠标的 android 应用程序吗

java - 重新设计 API 以拒绝重复请求

Asp.net 网站和 Web 服务托管