Web Service 安全性授权模型
以 Servlet 或 Enterprise JavaBeans (EJB) 形式实现的提供者应用程序可以使用 Web Service 并且受 Web Service 安全性保护。Java Platform, Enterprise Edition (Java EE) 基于角色的授权可用于控制对以 Servlet 或 EJB 形式实现的 Web Service 提供者应用程序的访问。虽然使用相同方式为 Servlet 和 EJB 实现配置了安全角色,但是对服务的访问因实现的不同而不同。
- 安全性令牌在 SOAP 请求的 HTTP 头中进行传递。
- Web 容器对安全性令牌进行认证,然后对用户执行基于角色的授权。
- 用户授权成功之后,Web 容器将使用入站消息调用 Web Service 引擎。
下图说明了基于角色的授权过程的每一个步骤针对 Servlet 发生的位置。

- 用户标识的安全性令牌在 SOAP 请求的安全性头中进行传递。
- Web Service 安全性对该令牌进行认证。
- 通过调用者配置,Web Service 安全性设置当前线程上的已认证令牌的标识。
- 当 Web Service 引擎调用端点时,EJB 容器对当前线程上的标识执行基于角色的授权。
下图说明了基于角色的授权过程的每一个步骤针对 EJB 发生的位置。

当 Web Service 提供程序以 Servlet 形式实现时,Web Service 安全性在 SOAP 请求的安全性头中传递的令牌不能用于基于角色的授权以访问服务。
当 Web Service 提供程序以 EJB 形式实现时,如果活动 Web Service 安全性约束中有该令牌的调用者配置,那么 Web Service 安全性在 SOAP 请求的安全性头中传递的令牌只能用于基于角色的授权以供 EJB 容器访问服务。
以 EJB 形式实现的 Web Service 提供程序还可以使用 Web 容器来执行基于角色的授权。为了执行此操作,图 Web Service 安全性中的 EJB 授权 中所示的路由器 Servlet 受 HTTP 基本认证保护。完成此操作后,过程继续执行,如图 Web Service 安全性中的 Servlet 授权 中所示。
当活动 Web Service 安全性约束中有入站令牌的调用者配置时,会在当前线程上的安全上下文中将该令牌设置为 runAs 标识。 受保护的提供者应用程序本身可以根据该标识来制定权限决策。这同时适用于 Servlet 和 EJB。