Creación de una señal SAML bearer mediante la API

Utilice la API de biblioteca SAML para crear una señal SAML bearer.

Acerca de esta tarea

Esta biblioteca permite crear una señal de titularidad SAML. Puede utilizar la API de biblioteca SAML para crear los objetos de configuración SAML obligatorios y, a continuación, utilizar esos objetos de configuración para generar una señal SAML bearer.

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 bearer:
    RequesterConfig reqData = samlFactory.newBearerTokenGenerateConfig();
    La instancia RequestConfig predeterminada es suficiente para generar una señal bearer, 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 setAuthenticationMethod:
    reqData.setAuthenticationMethod(“password”);
    Para inhabilitar las firmas en una aserción SAML, utilice el método setAssertionSignatureRequired, por ejemplo:
    reqData.setAssertionSignatureRequired(false);
    Para obtener más información, consulte la información acerca de la aserción SAML bearer.
  3. Utilice 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 sobre el almacén de claves y el almacén de confianza que identifican la clave para el cifrado y firma de SAML. La instancia ProviderConfig se crea utilizando los valores de propiedad a partir 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. A continuación se proporciona un ejemplo de la vía de acceso a nivel de servidor:
    raíz_servidor_aplicaciones/profiles/$PROFILE/config/cells/$CELLNAME/nodes/$NODENAME/servers/$SERVERNAME/SAMLIssuerConfig.properties
    A continuación se proporciona un ejemplo de la vía de acceso a 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(“cualquier nombre emisor”);
    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 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, SAMLTokenFactory busca un objeto SAMLToken en la lista PrivateCredentials del sujeto. Si existe un objeto SAMLToken, el valor de NameId o NameIdentifier se copiará en la nueva señal SAML. SAMLTokenFactory también copia los atributos y AuthenticationMethod de SAML de la señal SAML existente en la señal SAML nueva. 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 tema, sólo el nombre del principal de WSPrincipal se copiará del tema a la nueva señal SAML. No se copia ningún otro atributo del tema en la nueva señal SAML. Asimismo, el nombre del emisor, el certificado de firma, el método de confirmación, la información de KeyInfo para la señal Holder-of-key y las condiciones NotBefore y NotOnOrAfter se determinan mediante parámetros de configuración en 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 rellenar mediante programación atributos y el valor NameId de SAML. 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.

    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.
    Para llenar el NameIdentifier o el NameID de SAML, utilice la línea de código siguiente:
    cred.setRequesterNameID("cualquier nombre");
    El valor de la variable cualquier nombre se utiliza como el nombre principal de la señal SAML. El nombre aparece en la aserción como valor deNameIdentifier en una señal SAML de la versión 1.1, o como valor de NameId en una señal SAML de la versión 2.0. Por ejemplo, si el valor de cualquier nombre es Alice, se generará la aserción siguiente en una señal SAML de la 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> 

    Para incluir atributos 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 las siguientes aserciones <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 bearer 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 bearer SAML versión 1.1 a partir del sujeto:
SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11)

RequesterConfig reqData = samlFactory.newBearerTokenGenerateConfig();

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 bearer SAML versión 1.1 sin utilizar el sujeto:
SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);

RequesterConfig reqData = samlFactory.newBearerTokenGenerateConfig();
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_createbearertoken
File name: twbs_createbearertoken.html