Creación de una señal SAML sender-vouches mediante la API

Utilice la API de biblioteca SAML para crear una señal SAML sender-vouches, que incluye el método de confirmación sender-vouches. El método de confirmación sender-vouches se utiliza cuando un servidor tiene que propagar la identidad o el comportamiento del cliente.

Acerca de esta tarea

Cuando la función SAML está instalada en un servidor WebSphere, se proporciona una API de biblioteca SAML. Utilice la biblioteca para crear una señal SAML sender-vouches. Puede utilizar la API de biblioteca SAML para crear los objetos de configuración SAML obligatorios. A continuación, utilice esos objetos de configuración para generar una señal SAML sender-vouches.

Procedimiento

  1. Cree una instancia SAMLTokenFactory con la versión de la señal SAML como parámetro.
    1. Utilice la siguiente línea de código para importar el método:
      import com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory;
    2. Utilice una de las líneas de código siguientes para crear la instancia, en función de la versión de la señal.
      • Añada la línea de código siguiente para crear una instancia SAMLTokenFactory para una señal SAML versión 1.1:
        SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);
      • Añada la línea de código siguiente para crear una instancia SAMLTokenFactory para una señal SAML versión 2.0:
        SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token20);
  2. Después de crear la instancia, SAMLTokenFactory se utiliza para crear una instancia RequesterConfig, que determina cómo se genera la señal, según los requisitos de autenticación del solicitante. Utilice esta línea de código para crear la instancia de RequesterConfig para la señal sender-vouches:
    RequesterConfig reqData = samlFactory.newSenderVouchesTokenGenerateConfig();
    La instancia RequestConfig predeterminada es suficiente para generar una señal sender-vouches, pero se pueden incluir aserciones adicionales en la señal SAML personalizando la instancia RequesterConfig. Por ejemplo, para incluir información de autenticación mediante contraseña en la señal, utilice el método setAuthenticationMethod:
    reqData.setAuthenticationMethod(“password”);
    La validación de confianza para una aserción sender-vouches se localiza con el remitente, no el emisor, por lo que el elemento Enveloped-Signature no es obligatorio en la aserción. Para eliminar el elemento Enveloped-Signature de la aserción SAML, utilice el método setAssertionSignatureRequired; por ejemplo:
    reqData.setAssertionSignatureRequired(false);
  3. Utilice la API SAMLTokenFactory para crear una instancia ProviderConfig, que describe el emisor de la señal. La instancia ProviderConfig especifica el nombre del emisor SAML, así como información de almacén de claves y almacén de confianza, que identifica la clave para el cifrado y las firmas de SAML. La instancia ProviderConfig se crea utilizando los valores de propiedad de un archivo de propiedades. El archivo de propiedades especifica el valor predeterminado del objeto ProviderConfig. En un entorno de cliente Java™, este archivo de propiedades se define mediante una propiedad del sistema de JVM, com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath.
    En el entorno de ejecución de WebSphere Application Server, el nombre del archivo de propiedades es SAMLIssuerConfig.properties. El archivo se puede localizar en el directorio de configuración de nivel de servidor o en el directorio de nivel de célula, en ese orden de prioridad. Consulte el ejemplo siguiente de vía de acceso de nivel de servidor:
    raíz_servidor_aplicaciones/profiles/$PROFILE/config/cells/$CELLNAME/nodes/$NODENAME/servers/$SERVERNAME/SAMLIssuerConfig.properties
    Consulte el ejemplo siguiente de vía de acceso de nivel de célula:
    raíz_servidor_aplicaciones/profiles/$PROFILE/config/cells/$CELLNAME/sts/SAMLIssuerConfig.properties

    La propiedad del sistema de JVM, com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath, se ignora si la propiedad está definida en el entorno de ejecución del servidor. Para obtener una descripción detallada de todas las propiedades, consulte la información acerca de la configuración de una señal SAML durante la creación de señales.

    Utilice la siguiente línea de código para crear una instancia ProviderConfig predeterminada:

    ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(“any issuer name”);
    El nombre del emisor es opcional. Si se especifica el nombre del emisor, éste aparece en la aserción SAML. Si no se especifica el nombre del emisor, se utiliza como nombre de emisor una propiedad de nombre de emisor predeterminado del archivo SAMLIssuerConfig.properties.
  4. Opcional: Al crear una nueva señal SAML, SAMLTokenFactory utiliza un sujeto JAAS (Java Authentication and Authorization Service) o una instancia CredentialConfig para llenar la nueva señal SAML. Para utilizar un sujeto JAAS para llenar la señal, utilice la API com.ibm.websphere.security.auth.WSSubject getCallerSubject() o a la API getRunAsSubject() para obtener un sujeto JAAS que represente al cliente solicitante, o la identidad de la hebra de ejecución.
    • Cuando se utiliza el sujeto JAAS para crear una nueva señal SAML, la API SAMLTokenFactory busca un objeto SAMLToken en la lista PrivateCredentials del sujeto. Si existe un objeto SAMLToken, se copian los objetos NameId o NameIdentifier en la nueva señal SAML. SAMLTokenFactory también copia los atributos SAML y el método AuthenticationMethod de la señal SAML existente a la nueva señal SAML. La nueva señal SAML incluye un nuevo nombre de emisor, un nuevo certificado de firma, un método de confirmación, una nueva KeyInfo para el método de confirmación de holder-of-key y nuevas condiciones NotBefore y NotOnAfter. Estos valores de señal se determinan mediante los parámetros de configuración de los objetos ProviderConfig y RequesterConfig.

      Si no hay ningún objeto SAMLToken en el sujeto, sólo se copia el nombre de principal WSPrincipal de sujeto a la nueva señal SAML. Ningún otro atributo del sujeto se copia en la nueva señal SAML. De forma similar, el nombre del emisor, el certificado de firma, el método de confirmación, la KeyInfo de holder-of-key y las condiciones NotBefore y NotOnOrAfter se determinan mediante los parámetros de configuración de los objetos ProviderConfig y RequesterConfig.

      Como alternativa, puede utilizar el método RunAsSubject en la hebra de ejecución para crear la señal SAML. Cuando utilice este método, no pase el sujeto JAAS o el objeto CredentialConfig a la SAMLTokenFactory para crear la señal SAML. En su lugar, el contenido de la señal SAML existente se copia en la señal SAML nueva, tal como se ha descrito anteriormente.

    • Otro método para crear una señal SAML es utilizar un objeto CredentialConfig para llenar el NameId y los atributos de SAML mediante programación. Utilice este método en las circunstancias siguientes:
      • Se deben incluir atributos de SAML personalizados en la nueva señal SAML.
      • La señal SAML se crea manualmente en lugar de utilizar SAMLTokenFactory para llenar la señal SAML a partir de un sujeto JAAS de forma automática.
      • No existe ninguna señal SAML en el sujeto.
      • No hay ningún sujeto JAAS disponible.
    1. Para crear un objeto CredentialConfig sin utilizar el sujeto JAAS, utilice esta línea de código:
      CredentialConfig cred = samlFactory.newCredentialConfig ();
      No se proporciona ningún valor inicial para este objeto CredentialConfig, por lo que debe utilizar métodos setter para llenar el objeto CredentialConfig.
    2. Para llenar el NameIdentifier o el NameID de SAML, utilice la línea de código siguiente:
      cred.setRequesterNameID("cualquier nombre");
      El valor del parámetro pasado al método setRequesterNameID() se utiliza como nombre de principal en la señal SAML. El nombre aparece en la aserción como NameIdentifier en una señal SAML Versión 1.1 o como NameId en la señal SAML Versión 2.0. Por ejemplo, si el valor del parámetro pasado al método setRequesterNameID() es Alice, se genera la aserción siguiente en una señal SAML Versión 1.1:
      <saml:NameIdentifier>Alice</saml:NameIdentifier>
      La aserción siguiente se genera en una señal SAML de la versión 2.0:
      <saml2:NameID>Alice</saml2:NameID> 
    3. Para incluir atributos de SAML en la parte <AttributeStatement> de una aserción, utilice este código:
      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);
      Este código de ejemplo genera los siguientes aserciones de <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. Genere una señal SAML sender-vouches utilizando esta línea de código:
    SAMLToken samlToken = samlFactory.newSAMLToken(cred, reqData, samlIssuerCfg);
    Este método exige el permiso de seguridad Java wssapi.SAMLTokenFactory.newSAMLToken.

    En el apartado de ejemplo se incluyen ejemplos de código completos en los que se utilizan líneas de código de los pasos anteriores.

Ejemplo

Utilice este código de ejemplo para crear una señal sender-vouches SAML versión 1.1 a partir del sujeto:
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);
Utilice este código de ejemplo para crear una señal sender-vouches SAML versión 1.1 sin utilizar el sujeto:
SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);

RequesterConfig reqData = samlFactory.newSenderVouchesTokenGenerateConfig();
reqData.setAuthenticationMethod("Password"); //Método de autenticación para la Assertion

ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(Self issuer);

CredentialConfig cred = samlFactory.newCredentialConfig ();
cred.setRequesterNameID("Alice");   // SAML NameIdentifier
//Atributos SAML:	
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);

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_createsendervouchestoken
File name: twbs_createsendervouchestoken.html