Conectando o Token de Gerador Utilizando WSS APIs para Proteger a Autenticidade da Mensagem

Ao especificar o gerador de token, as informações são utilizadas no lado do gerador para gerar o token de segurança.

Antes de Começar

O processamento de token e arquitetura de token pluggable no tempo de execução da Web Services Security reutiliza a mesma interface de token de segurança e Java™ Service and Authorization Service (JAAS) Módulo de Login das APIs de Segurança de Serviços da Web (WSS API). A mesma implementação de criação e validação de token pode ser usada em ambos, API WSS e SPI WSS, no tempo de execução da Segurança de Serviços da Web.

Restrição: A interface com.ibm.wsspi.wssecurity.token.TokenGeneratorComponent não é usada com os serviços web JAX-WS. Se você estiver usando serviços da Web JAX-RPC, essa interface ainda é válida.

Observe que o elemento de nome da chave (KeyName) não é suportado no servidor de aplicativos porque não há asserção de política KeyName definida na especificação de rascunho OASIS Web Services Security atual.

Sobre esta Tarefa

O manipulador de retorno de chamada JAAS (CallbackHandler) e o módulo de login JAAS (LoginModule) são responsáveis pela criação do token de segurança no lado do gerador e pela validação (autenticação) do token de segurança no lado do consumidor.

Por exemplo, no lado do gerador, o token de Nome do Usuário é criado pelo JAAS LoginModule e utilizando o JAAS CallbackHandler para transmitir os dados de autenticação. O JAAS LoginModule cria o objeto Username SecurityToken e o passa para o tempo de execução da Segurança de Serviços da Web.

Depois, no lado do consumidor, o formato XML do Token Username é passado para o JAAS LoginModule para validação ou autenticação e o JAAS CallbackHandler é usado para passar dados de autenticação do tempo de execução da Segurança de Serviços da Web para o LoginModule. Após a autenticação do token, um objeto Username SecurityToken é criado e passado para o tempo de execução da Segurança de Serviços da Web.

Nota: WebSphere® Application Server não suporta um módulo de login stackable com a implementação do módulo de login padrão do WebSphere Application Server , significando adicionar o módulo de login antes ou depois da implementação do módulo de login WebSphere Application Server . Se você deseja empilhar as implementações de módulo de login, é necessário desenvolver os módulos de login necessários porque não há implementação padrão.
O pacote de webwebsphere.wssecurity.wssapi.token fornecido pelo WebSphere Application Server inclui suporte para estas classes:
  • Token de Segurança (SecurityTokenImpl)
  • Token de Segurança Binário (BinarySecurityTokenImpl)
Além disso, o WebSphere Application Server fornece as seguintes sub-interfaces pré-configuradas para tokens de segurança:
  • Token de chave derivado
  • SCT (Security Context Token)
  • Token de Nome de Usuário
  • Propagação de token LTPA
  • Token LTPA
  • Token X509PKCS7
  • Token X509PKIPath
  • Token X509v3
  • Token Kerberos v5

O token do Nome do Usuário, os tokens X.509 e os tokens LTPA são utilizados, por padrão, para autenticidade da mensagem. O token de chave derivado e os tokens X.509 são utilizados, por padrão, para assinatura e criptografia.

A WSS API e a WSS SPI são suportadas apenas no cliente. Para especificar o tipo de token de segurança no lado do gerador, também é possível configurar os conjuntos de política utilizando o console administrativo. Também é possível utilizar as WSS APIs ou os conjuntos de política para corresponder os tokens de segurança do consumidor.

As implementações padrão do Módulo de Login e de Retorno de Chamada são designadas para serem utilizadas como um par, indicando tanto uma parte do gerador como uma de consumidor. Para utilizar as implementações padrão, selecione o token de segurança apropriado do gerador e do consumidor em um par. Por exemplo, selecione system.wss.generate.x509 no gerador de token e system.wss.consume.x509 no consumidor de token quando o token X.509 for necessário.

Para configurar o token de segurança do lado do gerador, utilize a interface de gerador de token pré-configurado apropriado a partir das WSS APIs para concluir as etapas a seguir do processo de configuração de token:

Procedimento

  1. Gere a instância wssFactory.
  2. Gere a instância wssGenerationContext.

    A interface WSSGenerationContext armazena os componentes para gerar o WS-Security (Web Services Security), como as informações sobre assinatura e de criptografia, o token de segurança e o registro de data e hora. Quando o método generate() é chamado, todos esses componentes são gerados.

  3. Crie componentes do lado do gerador, como os objetos WSSSignature e WSSEncryption.
  4. Especifique uma configuração JAAS, especificando o nome da configuração de login JAAS.
    A configuração Java Authentication and Authorization Service (JAAS) especifica o nome da configuração JAAS . A configuração do JAAS especifica como o token efetua login no lado do consumidor. Não remova as configurações de login do sistema ou do aplicativo predefinidas. No entanto, dentro dessas configurações, é possível adicionar nomes de classes de módulo e especificar a ordem em que o WebSphere Application Server carrega cada módulo.
  5. Especifique um nome de classe do gerador de token.
    O nome da classe do gerador do token especifica as informações necessárias para gerar o SecurityToken. O token do Nome do Usuário, os tokens X.509 e os tokens LTPA são utilizados, por padrão, para autenticidade da mensagem.
  6. Especifique as configurações do manipulador de retorno de chamada, especificando um nome de classe do manipulador de retorno de chamada e também as chaves do manipulador de retorno de chamada.
    Esse nome de classe é o nome da classe de implementação do manipulador de retorno de chamada que é utilizado para o plug-in para a estrutura do token de segurança.

    A implementação do manipulador de retorno de chamada obtém o token de segurança requerido e transmite-o para o gerador de token. O gerador de token insere o token de segurança no cabeçalho da Segurança de Serviços da Web dentro da mensagem SOAP. Além disso, o gerador de token é um ponto de plug-in para a estrutura do token de segurança que pode ser conectada. Os fornecedores de serviços podem oferecer sua própria implementação, mas a implementação deve utilizar a interface WSSGenerationContext.

    WebSphere Application Server fornece as seguintes implementações de manipulador de callback padrão para o lado do gerador:
    com.ibm.websphere.wssecurity.callbackhandler.PropertyCallback
    Esta classe é um retorno de chamada para manipular o par nome-valor nos elementos nos arquivos XMI de configuração WS-Security (Web Services Security).
    com.ibm.websphere.wssecurity.callbackhandler.UNTGUIPromptCallbackHandler
    Esta classe é um manipulador de retorno de chamada para o token de Nome do Usuário com o prompt da GUI no lado do gerador. Esta instância é utilizada para configurar o objeto WSSGenerationContext para gerar um token de Nome do Usuário.
    com.ibm.websphere.wssecurity.callbackhandler.UNTGenerateCallbackHandler
    Esta classe é um manipulador de retorno de chamada para o token de Nome do Usuário no lado do gerador. Essa instância é utilizada para configuração no objeto WSSGenerationContext para conexão de um token de Nome do Usuário. Use esta implementação para um cliente de aplicativos Java Platform, Enterprise Edition (Java EE) apenas.
    com.ibm.websphere.wssecurity.callbackhandler.X509GenerateCallbackHandler
    Essa classe é um manipulador de retorno de chamada que é usado para gerar o certificado X.509 que é inserido no cabeçalho da Segurança de Serviços da Web na mensagem SOAP como um token de segurança binário no lado do gerador. Essa instância é utilizada para gerar objetos WSSSignature e WSSEncryption, configure os objetos no objeto WSSGenerationContext para gerar os tokens de segurança binária X.509. São necessários um armazenamento de chaves e uma definição de chave para este manipulador de retorno de chamada. Se você utilizar essa implementação, uma senha de armazenamento de chaves, caminho e tipo devem ser fornecidos no lado do gerador.
    com.ibm.websphere.wssecurity.callbackhandler.LTPAGenerateCallbackHandler
    Essa classe é um manipulador de retorno de chamada para tokens LTPA (Lightweight Third Party Authentication) no lado do gerador. Esta instância é utilizada para gerar o objeto WSSSignature e o objeto WSSEncryption para gerar um token LTPA.

    Esse manipulador de retorno de chamada é usado para validar o token de segurança LTPA inserido no cabeçalho da Segurança de Serviços da Web na mensagem SOAP como um token de segurança binário. No entanto, se o nome de usuário e a senha forem especificados, WebSphere Application Server autenticará o nome de usuário e a senha para obter o token de segurança LTPA em vez de obtê-lo a partir do Assunto Como Assunto. Use esse manipulador de retorno de chamada apenas quando o serviço da Web estiver agindo como um cliente no servidor de aplicativos. É recomendável que você não use este manipulador de callback em um cliente de aplicativos Java EE . Se você utilizar essa implementação, um ID de usuário e uma senha da autenticação básica devem ter sido fornecidos no lado do gerador.

    com.ibm.websphere.wssecurity.callbackhandler.KRBTokenConsumeCallbackHandler
    Essa classe é um manipulador de retorno de chamada para o token Kerberos v5 no lado do gerador. Essa instância é utilizada para configurar o objeto WSSGenerationContext para gerar o Kerberos v5 AP-REQ como um token de segurança binário. A instância também é utilizada para gerar os objetos WSSSignature e WSSEncryption para utilizar a chave de sessão ou a chave derivada do Kerberos na assinatura e criptografia de mensagens SOAP.
  7. Se um token X.509 for especificado, as informações adicionais de token também serão especificadas.
    Tabela 1. Informações para o token X.509 . Utilize o token X.509 para assinatura e criptografia.
    Informações do Token Descrição
    storeRef O nome de referência do armazenamento de chaves.
    storePath O caminho de arquivo de armazenamento de chaves a partir do qual o armazenamento de chaves é carregado, se necessário. É recomendável que você use o ${USER_INSTALL_ROOT} no nome do caminho enquanto esta variável se expande para o caminho WebSphere Application Server em sua máquina. Esse caminho é necessário ao utilizar as implementações de manipulador de retorno de chamada de tokens X.509.
    storePassword A senha que é utilizada para verificar a integridade do armazenamento de chaves ou a senha do armazenamento de chaves que é utilizada para desbloquear o armazenamento de chaves e para acessar o arquivo de armazenamento de chaves. O armazenamento de chaves e sua configuração são usados para algumas implementações de manipulador de callback padrão que são fornecidas pelo WebSphere Application Server.
    storeType O tipo de armazenamento de chaves que é utilizado para o localizador de chaves. Esta seleção indica o formato que é utilizado pelo arquivo de armazenamento de chaves. Os seguintes valores estão disponíveis para seleção:
    JKS
    Use esta opção se o armazenamento de chaves usar o formato Java Keystore (JKS).
    JCEKS
    Use esta opção se a Extensão de Cryptography Java estiver configurada no kit de desenvolvimento de software (SDK). O padrão IBM® JCE é configurado no WebSphere Application Server. Esta opção fornece maior proteção para chaves privadas armazenadas, utilizando a criptografia Triple DES.
    JCERACFKS
    Use JCERACFKS se os certificados forem armazenados em um anel de chave SAF (apenasz/OS® ).
    PKCS11KS (PKCS11)
    Utilize este formato se o seu armazenamento de chave utilizar o formato de arquivo PKCS#11. Os armazenamentos de chaves que utilizam este formato podem conter chaves RSA no hardware criptográfico ou podem criptografar chaves que utilizam hardware criptográfico para garantir proteção.
    PKCS12KS (PKCS12)
    Utilize esta opção se seu armazenamento de chave utilizar o formato de arquivo PKCS#12.
    alias O nome do alias da chave. O alias da chave é utilizado pelo localizador de chaves para localizar a chave no arquivo de armazenamento de chaves.
    keyPassword A senha da chave que é utilizada para recuperar a chave. Esta senha é requerida para acessar o objeto de chave no arquivo de armazenamento de chave.
    keyName O nome da chave. Para assinaturas digitais, o nome da chave é utilizado pelas informações sobre assinatura do gerador de pedido ou do consumidor de resposta para determinar qual chave será utilizada para assinar digitalmente a mensagem. Para criptografia, o nome da chave é utilizado para determinar a chave utilizada para criptografia. O nome da chave deve ser um DN (Nome Distinto) completo. Por exemplo, CN=Bob,O=IBM,C=US.
    certStores Uma lista de armazenamentos de certificados. Um armazenamento de certificados de coleta inclui uma lista de certificados não confiáveis intermediários e de CRLs (Certificate Revocation Lists). Esta etapa configura um armazenamento de certificados de coleta e listas de revogação de certificado para as ligações do gerador.
    identityAssertion Especifica se a asserção de identidade é utilizada. Selecione este item, se a asserção de identidade estiver definida. Essa opção indica que apenas a identidade do emissor inicial é necessária e inserida no cabeçalho de Segurança de Serviços da Web na mensagem SOAP. Para um gerador de token X.509, o servidor de aplicativos envia apenas o certificado de signatário original.
    requestorCertificate Especifica se o certificado do solicitante é utilizado.

    O seguinte pode ser especificado para um token X.509:

    1. Sem qualquer armazenamento de chaves.
    2. Com uma âncora de confiança.
      Uma âncora de confiança especifica uma lista de configurações do armazenamento de chaves que contêm certificados raiz confiáveis. Estas configurações são utilizadas para validar o caminho do certificado de tokens de segurança formatados por X.509 que chegam. Por exemplo, ao selecionar a âncora de confiança ou o armazenamento de certificados de um certificado confiável, será necessário configurar a âncora de confiança e o armazenamento de certificados antes de configurar o caminho do certificado.
    3. Com um armazenamento de chaves que é utilizado para o localizador de chaves.

      Em primeiro lugar, você deve ter criado o arquivo de armazenamento de chaves, utilizando um utilitário keytool, por exemplo. O armazenamento de chave é utilizado para recuperar o certificado X.509. Essa entrada especifica a senha que é utilizada para acessar o arquivo de armazenamento de chaves. Os objetos do armazenamento de chaves nas âncoras de confiança contêm certificados raiz confiáveis que são utilizados pela API CertPath para validar a confiança de uma cadeia de certificados.

    4. Com o armazenamento de chaves que é utilizado para o localizador de chaves e a âncora de confiança.
    5. Com um mapa que inclui pares chave-valor.
      Por exemplo, você pode especificar o nome do tipo de valor e o URI (Identificador Uniforme de Recursos) do tipo de valor. O tipo de valor especifica o URI de namespace do tipo de valor para o token gerado e representa o tipo de valor dessa classe:
      ValueType: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3
      Especifica um token de certificado X.509.
      ValueType: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1
      Especifica certificados X.509 em um caminho PKI (Public Key Infrastructure). Esta rotina de tratamento de retorno de chamada é utilizada para criar certificados X.509 codificados com o formato PkiPath. O certificado é inserido no cabeçalho da Segurança de Serviços da Web na mensagem SOAP como um token de segurança binário. É requerido um armazenamento de chave para este manipulador de retorno de chamada. Uma CRL não é suportada pela rotina de tratamento de retorno de chamada; portanto, o armazenamento de certificados de coleta não é requerido nem utilizado. Se você utilizar esta implementação, deverá fornecer uma senha, um caminho e um tipo de armazenamento de chaves neste painel.
      ValueType: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#PKCS7
      Especifica uma lista de certificados X.509 e listas de revogação de certificado em um formato PKCS#7. Este manipulador de retorno de chamada é utilizado para criar certificados X.509 codificados com o formato PKCS#7. O certificado é inserido no cabeçalho da Segurança de Serviços da Web na mensagem SOAP como um token de segurança binário. É requerido um armazenamento de chave para este manipulador de retorno de chamada. É possível especificar uma CRL (Certificate Revocation List) no armazenamento de certificados de coleta. A CRL é codificada com o certificado X.509 no formato PKCS#7. Se você utilizar esta implementação, deverá fornecer uma senha, um caminho e um tipo de armazenamento de chaves.

      Para alguns tokens, o WebSphere Application Server fornece um nome local predefinido para o tipo de valor. Ao especificar o seguinte nome local, não será necessário especificar um URI do tipo de valor:

      ValueType: https://www.ibm.com/websphere/appserver/tokentype/5.0.2
      Para um token LTPA, é possível utilizar LTPA para o nome local do tipo de valor. Este nome local faz com que https://www.ibm.com/websphere/appserver/tokentype/5.0.2 seja especificado para o tipo de valor Uniform Resource Identifier (URI).
      ValueType: https://www.ibm.com/websphere/appserver/tokentype/5.0.2
      Para propagação de token LTPA, você pode utilizar LTPA_PROPAGATION para o nome local do tipo de valor. Este nome local faz com que https://www.ibm.com/websphere/appserver/tokentype seja especificado para o tipo de valor Uniform Resource Identifier (URI).
  8. Se o token de Nome do Usuário for especificado como o nome de classe do gerador de token, as seguintes informações de token podem ser especificadas:
    1. Se a opção IdentityAssertion deve ser utilizada.
      Esta opção será selecionada, se a asserção de identidade for definida. Essa opção indica que apenas a identidade do emissor inicial é necessária e inserida no cabeçalho de Segurança de Serviços da Web na mensagem SOAP. Por exemplo, WebSphere Application Server envia apenas o nome de usuário do caller original para um gerador de token Username.
    2. Se a opção de identidade RunAsSubject deve ser utilizada.
      Esta opção será utilizada, se uma asserção de identidade for definida e você desejar utilizar a identidade Executar como em vez da identidade do responsável pela chamada inicial para a asserção de identidade em uma chamada de recebimento de dados. Esta opção será válida apenas se você tiver configurado o token de Nome do Usuário como o gerador de token.
    3. Se sendRealm deve ser utilizado.
    4. Se o nonce deve ser especificado.

      Esta opção indica se um Nonce está incluído para o gerador de token. Nonce é um número criptográfico exclusivo incorporado em uma mensagem para ajudar a parar repetidos ataques não autorizados de tokens do Nome do Usuário. Nonce é válido apenas quando o tipo de token gerado for um token de Nome do Usuário e estiver disponível apenas para ligação do gerador de pedido.

    5. Especifica a palavra-chave do registro de data e hora.
      Esta opção indica se será necessário verificar um registro de data e hora no token do Nome do Usuário. O registro de data e hora é válido apenas quando o tipo de token incorporado for um token de Nome do Usuário.
    6. Especifica um mapa que inclui pares chave-valor.
      Por exemplo, você pode especificar o nome do tipo de valor e o URI (Identificador Uniforme de Recursos) do tipo de valor. O tipo de valor especifica o URI de namespace do tipo de valor para o token gerado e representa o tipo de valor dessa classe:
      Tipo de valor do URI: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken
      Especifica um token de Nome do Usuário.
  9. Se o token Kerberos v5 for especificado como o nome de classe do gerador de token, as seguintes informações de token poderão ser especificadas:
    Informações do Token Descrição Valor Padrão
    nome Nome do proprietário do cliente Kerberos  
    senha Senha do cliente Kerberos  
    região Região do Kerberos associada ao cliente Kerberos Nome da região padrão no arquivo de configuração do Kerberos.

    Especifique nulo para usar o valor padrão.

    targetService Nome do serviço do Kerberos associado aos serviços da Web de destino.  
    targetHost Nome da região do Kerberos associado ao nome do serviço Kerberos.  
    tokenValueType Tipo de valor do token Kerberos em QName definido pela especificação Oasis Kerberos Token Profile v1.1. http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#GSS_Kerberosv5_AP_REQ
    targetRealm Nome da região do Kerberos associado ao nome do serviço Kerberos. Nome da região padrão no arquivo de configuração do Kerberos
    prompt Um valor booleano para ativar o prompt de login. falso
    supportTokenRequireSHA1 Um valor booleano para requerer uma chave SHA1 que é utilizada em mensagens de pedidos subseqüentes quando o token Kerberos é utilizado como token de suporte. falso

    A chave SHA1 será consumida apenas se o token Kerberos de suporte estiver protegido. Se configurada como true, a chave SHA1 será sempre consumida.

    alwaysAPREQ Um valor booleano para indicar que o cliente deve sempre enviar o token Kerberos AP_REQ nas mensagens de pedido. falso

    A chave SHA1 é utilizada no lugar das mensagens subseqüentes. Se configurada como true, o token Kerberos AP_REQ será sempre utilizado.

    requireDKT Um valor booleano para requerer uma chave derivada para proteção de mensagens. falso
    clabel A etiqueta de cliente para a chave derivada. WS-SecureConversation

    Especifique nulo para usar o valor padrão.

    slabel A etiqueta de serviço para a chave derivada. WS-SecureConversation

    Especifique nulo para usar o valor padrão.

    keylen O comprimento da chave derivada. 16

    Especifique zero para usar o valor padrão

    noncelen O comprimento do nonce. 16

    Especifique zero para usar o valor padrão

    encComponent Uma instância de WSSEncryption. Configure encComponent e sigComponent como null para que isso seja inicializado primeiro para o componente de criptografia ou de assinatura. Em seguida, use o componente inicializado apenas no construtor do manipulador de retorno de chamada para o segundo componente.
    sigComponent Uma instância de WSSSignature. Configure encComponent e sigComponent como null para que isso seja inicializado primeiro para o componente de criptografia ou de assinatura. Em seguida, use o componente inicializado apenas no construtor do manipulador de retorno de chamada para o segundo componente.
    Tipos de valores de token adicionais são definidos na especificação OASIS Kerberos Token Profile v1.1. Especifique o tipo de valor do token como o nome local. Não será necessário especificar o URI do tipo de valor para o token Kerberos v5.
    • http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ
    • http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ1510
    • http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#GSS_Kerberosv5_AP_REQ1510
    • http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#Kerberosv5_AP_REQ4120
    • http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#GSS_Kerberosv5_AP_REQ4120
  10. Se a Conversação Segura for utilizada para a proteção de mensagens, as seguintes informações deverão ser especificadas:
    Informações Descrição
    bootstrapWSSGenerationContext A configuração de auto-inicialização utilizada para proteger o token RST (RequestSecurityToken).
    bootstrapWSSConmingContext A configuração de auto-inicialização utilizada para consumir um RSTR (RequestSecurityTokenResponse) protegido.
    ENDPOINT_URL A URL do terminal em serviço.
    EncryptionAlgorithm Determina o tamanho da chave.
    cLabel A etiqueta de cliente utilizada ao criar a chave derivada.
    sLabel A etiqueta de servidor utilizada ao criar a chave derivada.
  11. Configure os componentes no objeto wssGenerationContext.
  12. Chame o método wssGenerationContext.process().

Resultados

Utilizando o processo WSS API (Web Services Security API), é possível configurar o gerador do token.

O Que Fazer Depois

Em seguida, é necessário especificar uma configuração semelhante do consumidor de token.