使用 API 创建 SAML sender-vouches 令牌

使用 SAML 库 API 来创建 SAML sender-vouches 令牌,其中包括 sender-vouches 确认方法。服务器需要传播客户机身份或客户机的行为时,将使用 sender-vouches 确认方法。

关于此任务

SAML 功能安装在 WebSphere® 服务器上时,将提供 SAML 库 API。使用库来创建 SAML sender-vouches 令牌。您可以使用 SAML 库 API 来创建所需的 SAML 配置对象。然后,使用这些配置对象来生成 SAML sender-vouches 令牌。

过程

  1. 将 SAML 令牌版本用作参数来创建 SAMLTokenFactory 实例。
    1. 使用以下代码行以导入该方法:
      import com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory;
    2. 根据令牌版本,使用以下代码行之一来创建实例。
      • 添加以下代码行为 v1.1 SAML 令牌创建 SAMLTokenFactory 实例:
        SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);
      • 添加以下代码行为 v2.0 SAML 令牌创建 SAMLTokenFactory 实例:
        SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token20);
  2. 在创建实例之后,SAMLTokenFactory 用于创建 RequesterConfig 实例,这根据请求者的认证需求来确定将如何生成令牌。 使用该代码行来创建 sender-vouches 令牌的 RequesterConfig 实例:
    RequesterConfig reqData = samlFactory.newSenderVouchesTokenGenerateConfig();
    缺省 RequestConfig 实例足以生成简单 sender-vouches 令牌,但是其他声明可以通过定制 RequesterConfig 实例包含在 SAML 令牌中。例如,为了将密码认证信息包含在令牌中,请使用 setAuthenticationMethod 方法:
    reqData.setAuthenticationMethod(“password”);
    sender-vouches 声明的信任验证是发送者的职责,而不是签发者的职责,所以在声明中无需包络签名元素。要从 SAML 声明移除包络签名元素,请使用 setAssertionSignatureRequired 方法;例如:
    reqData.setAssertionSignatureRequired(false);
  3. 使用 SAMLTokenFactory API 来创建 ProviderConfig 实例,这描述令牌签发者。ProviderConfig 实例指定 SAML 签发者名称,以及密钥库和信任库信息,这标识用于 SAML 加密和签名的密钥。 使用来自属性文件的属性值创建 ProviderConfig 实例。属性文件指定 ProviderConfig 对象的缺省值。在 Java™ 客户机环境中,该属性文件按 JVM 系统属性 com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath 定义。
    WebSphere Application Server 运行时环境中,属性文件名是 SAMLIssuerConfig.properties。 该文件可以按该优先顺序位于服务器级别配置目录或单元级别目录下。 请参阅服务器级别路径的以下示例:
    app_server_root/profiles/$PROFILE/config/cells/$CELLNAME/nodes/$NODENAME/servers/$SERVERNAME/SAMLIssuerConfig.properties
    请参阅单元级别路径的以下示例:
    app_server_root/profiles/$PROFILE/config/cells/$CELLNAME/sts/SAMLIssuerConfig.properties

    如果在服务器运行时环境中定义了属性,那么将忽略 JVM 系统属性 com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath。 有关所有属性的详细描述,请阅读关于令牌创建期间 SAML 令牌的配置的信息。

    使用以下代码行来创建缺省 ProviderConfig 实例:

    ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(“any issuer name”);
    签发者名称是可选的。如果指定了签发者名称,那么签发者名称显示在 SAML 声明中。如果没有指定签发者名称,那么将来自 SAMLIssuerConfig.properties 的缺省签发者名称属性用作签发者名称。
  4. 可选: 新建 SAML 令牌时,SAMLTokenFactory 使用 Java 认证和授权服务 (JAAS) 主体集或 CredentialConfig 实例来填充新的 SAML 令牌。 要使用 JAAS 主体集来填充令牌,请使用 com.ibm.websphere.security.auth.WSSubject getCallerSubject() API 或 getRunAsSubject() API 来获取表示请求客户机或者执行线程的身份的 JAAS 主体集。
    • 您使用 JAAS 主体集来新建 SAML 令牌时,SAMLTokenFactory API 在主题 PrivateCredentials 列表中搜索 SAMLToken 对象。如果存在 SAMLToken 对象,将 NameId 或 NameIdentifier 对象复制到新 SAML 令牌。SAMLTokenFactory 还将 SAML 属性和 AuthenticationMethod 方法从现有 SAML 令牌复制新的 SAML 令牌。新的 SAML 令牌包括新签发者名称、新签署证书、确认方法、holder-of-key 确认方法的新密钥信息以及新的 NotBefore 和 NotOnAfter 条件。这些令牌设置由 ProviderConfig 和 RequesterConfig 对象中的配置参数确定。

      如果主体集中没有 SAMLToken 对象,仅将 WSPrincipal 主体名称从主体集复制到新的 SAML 令牌。没有将主体集中的其他属性复制到新的 SAML 令牌。类似,签发者名称、签名证书、确认方法、holder-of-key 的密钥信息以及 NotBefore 和 NotOnOrAfter 条件由 ProviderConfig 和 RequesterConfig 对象中的配置参数确定。

      或者,您可以在执行线程上使用 RunAsSubject 方法来创建 SAML 令牌。使用此方法时,请勿将 JAAS 主体集或 CredentialConfig 对象传递到 SAMLTokenFactory 来创建 SAML 令牌。相反,如先前所述,将现有 SAML 令牌的内容复制到新的 SAML 令牌。

    • 创建 SAML 令牌的另一方法是使用 CredentialConfig 对象以编程方式填充 SAML NameId 和属性。在以下情况下使用此方法:
      • 定制 SAML 属性必须包含在新 SAML 令牌中。
      • SAML 令牌是手动创建,而不是使用 SAMLTokenFactory 从 JAAS 主体集自动填充 SAML 令牌。
      • 主体集中没有现存的 SAML 令牌。
      • 没有可用的 JAAS 主体集。
    1. 要在不使用 JAAS 主体集的情况下创建 CredentialConfig 对象,使用以下代码行:
      CredentialConfig cred = samlFactory.newCredentialConfig ();
      没有为此 CredentialConfig 对象提供的初始值,所以您必须使用 setter 方法来填充 CredentialConfig 对象。
    2. 要填充 SAML NameIdentifier 或 NameID,使用以下代码行:
      cred.setRequesterNameID("any name");
      将传递到 setRequesterNameID() 方法的参数值用作 SAML 令牌中的主体名称。在 SAML V1.1 令牌中,该名称在声明中显示为 NameIdentifier,而在 SAML V2.0 令牌中,该名称显示为 NameId。 例如,如果传递到 setRequesterNameID() 方法的参数值是 Alice,那么在 SAML V1.1 令牌中生成以下声明:
      <saml:NameIdentifier>Alice</saml:NameIdentifier>
      在 SAML V2.0 令牌中生成以下声明:
      <saml2:NameID>Alice</saml2:NameID> 
    3. 要将 SAML 属性包含在声明的 <AttributeStatement> 部分中,请使用该代码:
      SAMLAttribute samlAttribute = new SAMLAttribute("email" /* Name*/, new String[] {"joe@websphere"} 
      /*Attribute Values*/, null, "IBM WebSphere namespace" /* namespace*/, "email" /* format*/, "joe" /*friendly name */);
      ArrayList<SAMLAttribute> al = new ArrayList<SAMLAttribute>();
      al.add(samlAttribute)
      sattribute = new SAMLAttribute("Membership", new String[] {"Super users", "Gold membership"}, null, null /* format*/, null, null );
      al.add(samlAttribute );
      cred.setSAMLAttributes(al);
      此样本代码生成以下 <Attribute> 声明:
      <saml:Attribute AttributeName="email" NameFormat="email" AttributeNamespace="IBM WebSphere namespace">
      <saml:AttributeValue>joe@websphere</saml:AttributeValue>
      </saml:Attribute>
      <saml:Attribute AttributeName="Membership">
      <saml:AttributeValue>Super users</saml:AttributeValue><saml:AttributeValue>Gold membership</saml:AttributeValue>
      </saml:Attribute>
  5. 使用此代码行来生成 SAML sender-vouches 令牌:
    SAMLToken samlToken = samlFactory.newSAMLToken(cred, reqData, samlIssuerCfg);
    该方法需要 Java 安全许可权 wssapi.SAMLTokenFactory.newSAMLToken。

    使用来自先前步骤的代码行的完整代码样本包含在“示例”部分中。

示例

使用此样本代码从主体集创建 SAML v1.1 sender-vouches 令牌:
SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11)

RequesterConfig reqData = samlFactory.newSenderVouchesTokenGenerateConfig();

ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(“WebSphere Server”);

Subject subject =  com.ibm.websphere.security.auth.WSSubject.getRunAsSubject(); 

SAMLToken samlToken = samlFactory.newSAMLToken(subject, reqData, samlIssuerCfg);
使用此样本代码来创建 SAML v1.1 sender-vouches 令牌而不使用该主体集:
SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);

RequesterConfig reqData = samlFactory.newSenderVouchesTokenGenerateConfig();
reqData.setAuthenticationMethod("Password"); //Authentication method for Assertion

ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(Self issuer);

CredentialConfig cred = samlFactory.newCredentialConfig ();
cred.setRequesterNameID("Alice");   // SAML NameIdentifier
//SAML attributes:	
SAMLAttribute attribute = new SAMLAttribute
   ("email" /* Name*/, new String[] {"joe@websphere"} 
   /*Attribute Values in String*/,null 
   /*Attribute Values in XML */, "WebSphere" /* Namespace*/, "email" /* format*/, "joe" /*Friendly_name */);
ArrayList<SAMLAttribute> al = new ArrayList<SAMLAttribute>();
al.add(attribute);
attribute = new SAMLAttribute("Membership", new String[] {"Super users", "My team"}, null, null, null, null  );
al.add(attribute);
cred.setSAMLAttributes(al);

SAMLToken samlToken = samlFactory.newSAMLToken(cred, reqData, samlIssuerCfg);

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_createsendervouchestoken
文件名:twbs_createsendervouchestoken.html