Criando um Token de Transmissão SAML Utilizando a API

Utilize a API de biblioteca SAML para criar o token de transmissão SAML.

Sobre Esta Tarefa

Essa biblioteca permite criar o token de acesso SAML. É possível utilizar a API da biblioteca SAML para criar os objetos de configuração SAML necessários e depois utilizar esses objetos de configuração para gerar um token de transmissão SAML.

Procedimento

  1. Crie uma instância SAMLTokenFactory utilizando a versão do token SAML como um parâmetro.
    1. Utilize a seguinte linha de código para importar o método:
      import com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory;
    2. Utilize uma das seguintes linhas de código para criar a instância, dependendo da versão do token.
      • Inclua a seguinte linha de código para criar uma instância SAMLTokenFactory para um token SAML versão 1.1:
        SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);
      • Inclua a seguinte linha de código para criar uma instância SAMLTokenFactory para um token SAML versão 2.0:
        SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token20);
  2. Após você criar a instância, SAMLTokenFactory é utilizada para criar uma instância RequesterConfig, que determina como o token será gerado, de acordo com os requisitos de autenticação do solicitante. Utilize esta linha de código para criar a instância RequesterConfig para o token de transmissão:
    RequesterConfig reqData = samlFactory.newBearerTokenGenerateConfig();
    A instância RequestConfig padrão é suficiente para gerar um token de transmissão simples, mas asserções adicionais podem ser incluídas no token SAML por meio da customização da instância RequesterConfig. Por exemplo, para incluir informações de autenticação de senha no token, utilize setAuthenticationMethod:
    reqData.setAuthenticationMethod(“password”);
    Para desativar a assinatura em uma asserção do SAML, utilize o método setAssertionSignatureRequired, por exemplo:
    reqData.setAssertionSignatureRequired(false);
    Para obter mais informações, leia sobre a asserção de transmissão SAML.
  3. Utilize SAMLTokenFactory para criar uma instância ProviderConfig, que descreve o emissor do token. A instância ProviderConfig especifica o nome do emissor SAML, bem como informações do keystore e do truststore, que identificam a chave para assinatura e criptografia SAML. A instância ProviderConfig é criada por meio do uso de valores de propriedade de um arquivo de propriedades. O arquivo de propriedades especifica o valor padrão do objeto ProviderConfig. Em um ambiente de cliente Java™, esse arquivo de propriedades é definido por uma propriedade de sistema JVM, com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath.
    No ambiente de tempo de execução WebSphere Application Server, o nome do arquivo de propriedades é SAMLIssuerConfig.properties. O arquivo pode estar localizado no diretório de configuração no nível do servidor ou no diretório no nível da célula, nessa ordem de precedência. Um exemplo de caminho no nível do servidor é o seguinte:
    app_server_root/profiles/$PROFILE/config/cells/$CELLNAME/nodes/$NODENAME/servers/$SERVERNAME/SAMLIssuerConfig.properties
    Um exemplo de caminho no nível da célula é o seguinte:
    app_server_root/profiles/$PROFILE/config/cells/$CELLNAME/sts/SAMLIssuerConfig.properties

    A propriedade de sistema JVM, com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath, será ignorada se a propriedade for definida no ambiente de tempo de execução do servidor. Para obter uma descrição detalhada de todas as propriedades, leia sobre a configuração de um token SAML durante a criação do token.

    Utilize a seguinte linha de código para criar uma instância ProviderConfig padrão:

    ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(“any issuer name”);
    O nome do emissor é opcional. Se o nome do emissor for especificado, ele aparecerá na asserção do SAML. Se o nome do emissor não for especificado, uma propriedade de nome do emissor padrão de SAMLIssuerConfig.properties será utilizada como nome do emissor.
  4. Opcional: Durante a criação de um novo token SAML, SAMLTokenFactory utiliza um JAAS subject ou uma instância CredentialConfig para preencher o novo token SAML. Para usar um JAAS subject para preencher o token, utilize a API getCallerSubject() ou a API getRunAsSubject() do com.ibm.websphere.security.auth.WSSubject para obter um JAAS subject que represente o cliente solicitante ou a identidade do encadeamento de execução.

    Quando você utiliza o JAAS subject para criar um novo token SAML, SAMLTokenFactory procura um objeto SAMLToken na lista PrivateCredentials do subject. Se um objeto SAMLToken existir, NameId ou NameIdentifier será copiado no novo token SAML. O SAMLTokenFactory também copia os atributos SAML e AuthenticationMethod do token SAML existente no novo token SAML. O novo token SAML inclui um novo nome de emissor, novo certificado de assinatura, método de confirmação, novo KeyInfo para o método de confirmação holder-of-key e novas condições NotBefore e NotOnAfter. Essas configurações de token são determinadas pelos parâmetros de configuração nos objetos ProviderConfig e RequesterConfig.

    Se não houver um objeto SAMLToken no assunto, apenas o nome do principal WSPrincipal será copiado do assunto no novo token SAML. Nenhum outro atributo no subject será criado no novo token SAML. Da mesma forma, o nome do emissor, o certificado de assinatura, o método de confirmação, KeyInfo para holder-of-key e as condições NotBefore e NotOnOrAfter são determinados pelos parâmetros de configuração nos objetos ProviderConfig e RequesterConfig.

    Alternativamente, é possível usar o método RunAsSubject no encadeamento de execução para criar o token SAML. Ao usar esse método, não transmita o JAAS subject ou o objeto CredentialConfig ao SAMLTokenFactory para criar o token SAML. Em vez disso, o conteúdo do token SAML existente será copiado no novo token SAML, conforme descrito anteriormente.

    Outro método de criação de um token SAML é o uso do objeto CredentialConfig para preencher o NameId e Atributos SAML programaticamente. Utilize esse método nas seguintes circunstâncias:
    • Atributos SAML customizados devem ser incluídos no novo token SAML.
    • O token SAML é criado manualmente em vez de se usar SAMLTokenFactory para preencher o token SAML automaticamente a partir de um JAAS subject.
    • Não existe um token SAML existente no subject.
    • Não existe um JAAS subject disponível.

    Para criar um objeto CredentialConfig sem o uso do JAAS subject, utilize esta linha de código:

    CredentialConfig cred = samlFactory.newCredentialConfig ();
    Não existe um valor inicial fornecido para esse objeto CredentialConfig, portanto, é necessário utilizar métodos setter para preencher o objeto CredentialConfig.
    Para preencher o NameIdentifier ou NameID SAML, utilize a seguinte linha de código:
    cred.setRequesterNameID("any name");
    O valor da variável any name é utilizado como nome do principal no token SAML. O nome aparece na asserção como NameIdentifier em um token SAML Versão 1.1, ou NameId no token SAML Versão 2.0. Por exemplo, se o valor de any name for Alice, a asserção a seguir será gerada em um token SAML Versão 1.1:
    <saml:NameIdentifier>Alice</saml:NameIdentifier>
    A asserção a seguir é gerada em um token SAML Versão 2.0:
    <saml2:NameID>Alice</saml2:NameID> 

    Para incluir atributos SAML na parte <AttributeStatement> de uma asserção, use 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 amostra gera as seguintes asserções 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. Gere um token de transmissão SAML utilizando esta linha de código:
    SAMLToken samlToken = samlFactory.newSAMLToken(cred, reqData, samlIssuerCfg);
    Esse método requer a permissão de segurança Java wssapi.SAMLTokenFactory.newSAMLToken.

    Amostras de código completas utilizando linhas de código das etapas anteriores estão incluídas na seção Exemplo.

Exemplo

Utilize este código de amostra para criar um token de transmissão SAML versão 1.1 a partir do subject:
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);
Utilize este código de amostra para criar um token de transmissão SAML versão 1.1 sem usar o subject:
SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);

RequesterConfig reqData = samlFactory.newBearerTokenGenerateConfig();
reqData.setAuthenticationMethod("Password"); //Método de autenticação para Asserção

ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(Self issuer);

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

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_createbearertoken
Nome do arquivo: twbs_createbearertoken.html