从服务器应用程序中的 JAAS 主题检索令牌

在 WebSphere® Application Server V6 中,安全性处理程序负责传播安全性令牌。这些安全性令牌嵌入在简单对象访问协议(SOAP)安全性头中,并传递到下游的服务器。安全性令牌包括在 com.ibm.wsspi.wssecurity.auth.token.Token 接口的实现类中。您可以从服务器应用程序或客户机应用程序检索安全性令牌数据。

对于服务器应用程序来说,应用程序作为请求使用者和响应生成者工作、已部署并在 Java™ 2 Platform, Enterprise Edition(J2EE)容器中运行。Web Service 安全性的使用者组件存储它在当前线程的 Java 认证和授权服务(JAAS)主体中接收到的安全性令牌。您可以从 JAAS 主题检索在容器中作为本地线程的安全性令牌。完成以下步骤从服务器应用程序检索安全性令牌数据:

  1. 使用 WSSubject 实用程序类获取当前线程的 JAAS 主题。 如果在 WebSphere Application Server 管理控制台中中的“全局安全性”面板上启用 Java 2 安全性,并且如果应用程序代码未被授予 javax.security.auth.AuthPermission("wssecurity.getCallerAsSubject") 许可权,则对 JAAS 主题的访问就会被拒绝。以下代码样本显示如何获取 JAAS 主题:
    javax.security.auth.Subject subj;
    try {
    subj = com.ibm.websphere.security.auth.WSSubject.getCallerSubject();
    } catch (com.ibm.websphere.security.WSSecurityException e) {
      …
    }
  2. 从主题获取一组专用凭证。 有关更多信息,请通过信息中心参阅应用程序编程接口(API) com.ibm.websphere.security.auth.WSSubject 类。在信息中心中访问此信息,请单击引用 > 开发者 > API 文档 > 应用程序编程接口。在“应用程序编程接口”一文中,单击 com.ibm.websphere.security.auth > WSSubject
    注意: 启用 Java2 安全性后,可能需要使用 AccessController 类来避免由于操作 J2EE 容器中的安全性对象而导致的安全性违例。
    以下代码样本显示如何设置 AccessController 类并获取专用凭证:
    Set s = (Set) AccessController.doPrivileged(
    new PrivilegedAction() {
    public Object run() { 
    return subj.getPrivateCredentials();
    }
       });
  3. 在专用凭证中搜索定向令牌类。 您可以使用 java.util.Iterator 接口来搜索定向令牌类。以下示例说明如何在安全头中检索具有特定令牌标识值的用户名令牌。还可以使用其他方法调用检索安全性令牌。有关更多信息,请参阅 com.ibm.wsspi.wssecurity.auth.token.Token 接口或定制令牌类的应用程序编程接口(API)文档。
    com.ibm.wsspi.wssecurity.auth.token.UsernameToken unt;
    Iterator it = s.iterator();
    while (it.hasNext()) {
      Object obj = it.next();
      if (obj != null &&
    obj instanceOf com.ibm.wsspi.wssecurity.auth.token.UsernameToken) {
        unt =(com.ibm.wsspi.wssecurity.auth.token.UsernameToken) obj;
    if (unt.getId().equals(“…”))     break;else continue;
      }
    }
完成这些步骤后,您就从服务器应用程序中的 JAAS 主题检索了安全性令牌。
相关概念
安全性令牌

反馈