Solicitando Tokens Holder-of-Key SAML com Chave Assimétrica a partir do Security Token Service Externo Usando WSS APIs

É possível solicitar um Security Token Service (STS) externo para emitir tokens SAML com o método de confirmação de assunto holder-of-key com a chave pública em um certificado X.509 com o modelo de programação Java™ API for XML-Based Web Services (JAX-WS) e com o Web Services Security APIs (WSS APIs).

Antes de Iniciar

Essa tarefa assume que você é familiarizado com o modelo de programação JAX-WS, as interfaces API WSS, os conceitos de SAML, e o uso dos conjuntos de política para configurar e administrar as configurações dos serviços da Web. Conclua as ações a seguir antes de iniciar essa tarefa:
  • Consulte a propagação de tokens holder-of-key SAML emitidos automaticamente com a chave assimétrica usando as WSS APIs.
  • Familiarize-se com o uso de materiais-chave integrados nos tokens SAML para obter proteção de mensagem usando as WSS APIs. Seu cenário de uso requer solicitar tokens SAML a partir do STS externo em vez de usar os tokens SAML emitidos automaticamente.
  • Consulte a solicitação de tokens sender-vouches SAML de um STS externo para propagar usando APIs WSS com proteção de nível de mensagem
  • Consulte a solicitação de tokens sender-vouches SAML de um STS externo para propagar usando APIs WSS com proteção de nível de transporte
  • Consulte a solicitação de tokens de acesso SAML de um STS externo para propagar usando APIs WSS com proteção de nível de transporte
  • Familiarize-se com o acesso a um STS externo usando os STS usando os WSS APIs.

Sobre Esta Tarefa

Essa tarefa mostra um código de exemplo para solicitar tokens SAML com o método de confirmação de assunto holder-of-key e com a chave pública integrada em um certificado X.509 usando as WSS APIs a partir do STS externo. Essa tarefa é focada no envio de um certificado X.509 para um STS externo quando solicitar tokens holder-of-key SAML.

Procedimento

  1. Especifique um STS a partir do qual um token de segurança SAML é solicitado que contém o método de confirmação de assunto holder-of-key; por exemplo:
    com.ibm.websphere.wssecurity.wssapi.WSSFactory factory =
        com.ibm.websphere.wssecurity.wssapi.WSSFactory.getInstance();
    WSSGenerationContext gencont1 = factory.newWSSGenerationContext();
    WSSConsumingContext concont1 = factory.newWSSConsumingContext();
    HashMap<Object, Object> cbackMap1 = new HashMap<Object, Object>();
    cbackMap1.put(SamlConstants.STS_ADDRESS, "https://www.example.com/sts");
    cbackMap1.put(SamlConstants.SAML_APPLIES_TO, "http://myhost:9080/myService");
    cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_SOAP_VERSION, "1.1");
    cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_WSTRUST_NAMESPACE,
                  "http://docs.oasis-open.org/ws-sx/ws-trust/200512"); 
    cbackMap1.put(IssuedTokenConfigConstants.TRUST_CLIENT_COLLECTION_REQUEST,
                  "true");   //RST or RSTC
    cbackMap1.put(SamlConstants.TOKEN_TYPE,
                  "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0");
    cbackMap1.put(SamlConstants.CONFIRMATION_METHOD, "holder-of-key");

    Para o método de confirmação de assunto holder-of-key, você deve especificar se uma chave pública ou uma chave simétrica é integrada nos tokens SAML. Este exemplo especifica um tipo de chave pública. Em seguida, especifica o local de um certificado que contém a chave pública e o local da chave privada correspondente para o remetente para assinar digitalmente os elementos das mensagens SOAP para atender aos requisotos de confirmação de assunto holder-of-key.

  2. Especifique o local de um certificado X.509 para integrar nos tokens SAML e uma chave privada correspondente a ser usada para assinar digitalmente os elementos de mensagem, por exemplo:
    cbackMap1.put(SamlConstants.KEY_TYPE,
                  "http://docs.oasis-open.org/ws-sx/ws-trust/200512/PublicKey");
    cbackMap1.put(SamlConstants.KEY_ALIAS, "soapinitiator" );
    cbackMap1.put(SamlConstants.KEY_NAME, "CN=SOAPInitator, O=Example");
    cbackMap1.put(SamlConstants.KEY_PASSWORD, "myinitatkeypass");
    cbackMap1.put(SamlConstants.KEY_STORE_PATH, "keystores/initiator.jceks");
    cbackMap1.put(SamlConstants.KEY_STORE_PASSWORD, "myinitatstorepass");
    cbackMap1.put(SamlConstants.KEY_STORE_TYPE, "jceks");
    
    SAMLGenerateCallbackHandler cbHandler1 = new SAMLGenerateCallbackHandler(cbackMap1);
    cbHandler1.setWSSConsumingContextForTrustClient(concont1);
    cbHandler1.setWSSGenerationContextForTrustClient(gencont1);
    
    SecurityToken samlToken = factory.newSecurityToken(SAMLToken.class, cbHandler1, "system.wss.generate.saml");

    O certificado X.509 especificado é enviado nas solicitações WS-Trust para o STS externo no elemento trust:UseKey. Para obter mais informações, leia sobre Asserções SAML Definidas no Padrão SAML Token Profile. O SSL é usado para proteger a integridade e a confidencialidade das mensagens de solicitação e resposta do WS-Trust nesse exemplo.

Resultados

Você aprendeu como construir blocos para solicitar tokens SAML com o método de confirmação de assunto holder-of-key e com a chave assimétrica a partir de um STS externo usando as WSS APIs. Para usar o token SAML para assinar mensagens de solicitação, familiarize-se com o código de exemplo no tópico "Propagando tokens holder-of-key SAML emitidos automaticamente com a chave assimétrica usando WSS APIs".


Í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_configsamlhok_asymmetric_sts_client
Nome do arquivo: twbs_configsamlhok_asymmetric_sts_client.html