Solicitando Tokens Holder-of-Key SAML com Chave Simé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 simétrica que seja criptografada por um serviço de destino. Use o modelo de programação Java™ API for XML-Based Web Services (JAX-WS) e o Web Services Security APIs (WSS APIs) para concluir essa tarefa.

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 simétrica usando 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 de um 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 WSS APIs.

Sobre Esta Tarefa

Essa tarefa mostra um código de exemplo para solicitar tokens SAML a partir de um STS externo, com o método de confirmação de assunto holder-of-key e com a chave simétrica integrada que seja criptografada para o serviço de destino usando o WSS APIs. Essa tarefa é focada no envio de uma mensagem de solicitação do WS-Trust para um STS externo quando solicitar tokens holder-of-key SAML com chaves simétricas.

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");  //STS URL
    cbackMap1.put(SamlConstants.SAML_APPLIES_TO, "http://myhost:9080/myService");  //Target Service
    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 solicitar um token de segurança SAML holder-of-key a partir do STS, você deve especificar se uma chave simétrica ou uma chave pública é integrada por meio de um elemento KeyType em uma solicitação de confiança. Esse exemplo requer um tipo de chave simétrica, como mostra a próxima etapa.

  2. Especifique a chave simétrica para ser integrada em tokens de segurança SAML, por exemplo:
    cbackMap1.put(SamlConstants.KEY_TYPE,
                 "http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey");
    
    SAMLGenerateCallbackHandler cbHandler1 = new SAMLGenerateCallbackHandler(cbackMap1);
    cbHandler1.setWSSConsumingContextForTrustClient(concont1);
    cbHandler1.setWSSGenerationContextForTrustClient(gencont1);
    
    SecurityToken samlToken = factory.newSecurityToken(SAMLToken.class, cbHandler1, "system.wss.generate.saml");
    O token SAML solicitado contém uma chave simétrica que é criptografada para o serviço de destino. O STS também retorna a chave simétrica não criptografada por meio do elemento WS-Trust RequestedProofToken. Consulte o exemplo a seguir.
    <wst:RequestedProofToken>
        <wst:BinarySecret
          xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
          wsu:Id="_27325D34CE4BCC83141288966548620">n68rFQba+XTZLNBfEc4prg==</wst:BinarySecret>
    </wst:RequestedProofToken>

    O elemento RequestedProofToken é mostrado aqui para sua informação. O processamento detalhado não é exposto para os usuários do WSS APIs. O elemento RequestedProofToken e a chave simétrica são manipulados pelo ambiente de tempo de execução do Web Services Security, ou mais precisamente, pelo SAMLGenerateLoginModule que é especificado na configuração de login do JAAS system.wss.geenrate.saml.

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 simétrica a partir de um STS externo usando WSS APIs. Para usar o token SAML para assinar mensagens de solicitação, revise o código de exemplo no tópico “Propagando Tokens Holder-of-key SAML Emitidos Automaticamente com Chave Simétrica Usando APIs do WSS”.


Í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_symmetric_sts_client
Nome do arquivo: twbs_configsamlhok_symmetric_sts_client.html