Geração de tokens SPNEGO para solicitações JAX-WS de saída

A classe com.ibm.wsspi.security.auth.krb5. SpnegoTokenHelper pode ser usada para criar programaticamente um token SPNEGO.

Há 5 variações diferentes para se obter as credenciais Kerberos usadas para o token SPNEGO de saída:
  1. Um token solicitado que usa credenciais do Windows Native. Quando o processo do WebSphere Java™ estiver em execução em um sistema Windows com um ID do usuário que possui credenciais Kerberos, o sistema operacional Windows manterá um Kerberos Ticket Granting Ticket (TGT) para esse usuário. A classe SpnegoTokenHelper que utiliza o TGT para solicitar um token SPNEGO que pode ser solicitado para um ServicePrincipalName (SPN), para o sistema de serviço de destino.
  2. Um token solicitado que usa credenciais Kerberos em cache. Em um sistema no qual um usuário efetuou login, geralmente utilizando ferramentas como a ferramenta kinit do Java, as credenciais Kerberos do usuário são armazenadas em um arquivo de cache denominado krb5cc_<userid>. Como alternativa, um arquivo keytab que contém uma chave do usuário pode ser criado utilizando várias ferramentas, como a ferramenta ktpass da Microsoft ou a ferramenta ktab Java. Esses arquivos contêm uma cópia da chave Kerberos do usuário que pode ser usada para obter um Ticket Granting Ticket (TGT) para esse ID do usuário. A classe SpnegoTokenHelper que utiliza o TGT para solicitar um token SPNEGO que pode ser solicitado para um ServicePrincipalName (SPN), para o sistema de serviço de destino. O processo do WebSphere deve ser configurado para usar o arquivo krb5cc_<userid ou arquivo keytab. O UserPrincipalName (UPN) para a credencial em cache no arquivo também deve ser fornecido.
  3. Um token solicitado que usa uma credencial Kerberos que, por sua vez, usa um ID do usuário e senha. Nesse cenário, o processo WebSphere usa a classe SpnegoTokenHelper para se conectar ao servidor Kerberos Key Distribution com o ID do usuário e senha fornecidos para obter um Ticket Granting Ticket (TGT). A classe, em seguida, solicita o token SPNEGO com esse TGT. A classe SpnegoTokenHelper requer o ServicePrincipalName (SPN) para o sistema de serviço de destino e o ID do usuário e senha.
  4. Um token solicitado usando uma credencial Kerberos existente em um Java Subject. O Subject pode obter uma credencial Kerberos de uma das seguintes maneiras:
    • O usuário efetuou login em um aplicativo da web usando a autenticação da web SPNEGO de entrada. Somente a Autenticação da web SPNEGO precisa ser configurada e ativada no WebSphere Application Server para essa opção. O ID do usuário Kerberos que está associado ao serviço SPNEGO de entrada deve ser ativado para a delegação Kerberos completa.
    • Uma solicitação de serviço da web JAX-WS foi recebida contendo um token WS-Security Kerberos. O ID do usuário Kerberos que está associado ao serviço da web de entrada deve ser ativado para a delegação Kerberos completa.
    • O usuário efetuou login com o ID do usuário e senha e o WebSphere Application Server foi configurado para autenticação LTPA e Kerberos.
    • Uma solicitação de serviço da web JAX-WS foi recebida contendo um token de nome do usuário com uma senha, e o WebSphere Application Server foi configurado para autenticação LTPA e Kerberos. A classe SpnegoTokenHelper usará as credenciais no Subject para solicitar um tíquete de serviço para o ServicePrincipalName (SPN), para o sistema de serviço de destino. Os métodos que estão associados a essa abordagem requerem um parâmetro do Java Subject, além do valor de SPN.
    • Token solicitado usando uma credencial Kerberos no Java Subject da identidade do responsável pela chamada atual. Essa abordagem é semelhante à abordagem anterior, e um método de conveniência é usado na classe SpnegoTokenHelper para obter a identidade do responsável pela chamada atual. As restrições no Subject mencionadas anteriormente ainda se aplicam. Os métodos que estão associados a essa abordagem requerem apenas o ServicePrincipalName (SPN).

Todas as 5 abordagens têm duas variações; na primeira variação, o tempo de vida do token pode ser especificado e uma sinalização booleana indicando que um token delegável deve ser solicitado. Na segunda variação, o temo de vida do token é infinito, e o token não é solicitado como delegável.

Todas as cinco abordagens retornam uma sequência (por exemplo, “Negociar YIIFKwYG….”). É responsabilidade do programador usar a sequência para injetar o cabeçalho Authorization de saída.

Notas para credenciais nativas
O cache de credenciais Microsoft Kerberos Logon Session (MSLSA) dependem da capacidade para extrair o ticket Kerberos inteiro, incluindo a chave de sessão a partir do cache de credenciais Kerberos Logon Session (LSA). Em uma tentativa de aumentar a segurança, a Microsoft implementou um recurso pelo qual ela não exporta mais as chaves de sessão para Ticket Getting Tickets, o que pode fazer com que elas sejam inutilizáveis para o IBM® JGSS quando forem feitas tentativas de solicitar mais tickets de serviços. Esse novo recurso foi visto no Windows 2003 Server e em sistemas posteriores. A Microsoft forneceu a seguinte chave de registro para desativar este novo recurso:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
AllowTGTSessionKey = 0x01 (DWORD)
Requisitos no arquivo de configuração do Kerberos
O arquivo de configuração Kerberos deve ser configurado corretamente, independentemente da abordagem.
  • O modo como o processo do WebSphere atinge o Key Distribution Center (KDC) deve ser configurado adequadamente por meio das sub-rotinas [realms] e [domain_realm].
  • Os tipos de criptografia a serem usados na sub-rotina [libdefaults] devem especificar os valores default_tkt_enctypes e default_tgs_enctypes.
  • A sub-rotina [libdefaults] deve incluir o seguinte:
    • forwardable = true
    • renewable = true
    • noaddresses = true
  • A sub-rotina [libdefaults] deve definir um valor clockskew razoável.

Referenciando um keytab

Para usar um keytab criado, uma configuração JAAS deve fazer referência a keytab. Como nenhuma das configurações JAAS fornecidas com o WebSphere sabe qual keytab usar, deve-se copiar uma configuração do JAAS existente, e incluir a referência no keytab. Como um exemplo, o WebSphere Application Server usa o arquivo <profile>/properties/wsjaas.conf para configurações de login do JAAS. O exemplo a seguir mostra uma configuração de login do JAAS que faz referência a um arquivo keytab denominado arquivo cachKerbUser.keytab.
JAASClientUsingKeytab {
  com.ibm.security.auth.module.Krb5LoginModule required  useKeytab="file:///C:\\WAS\\ND855\\profiles\\AppSrv01\\config\\cells\\testserver-vmCell01-855\\cachKerbUser.keytab" credsType=both 
tryFirstPass=true forwardable=true noAddress=true;
};
Nota: Quando um usuário executar um login do Kerberos com a ferramenta kinit do Java, as credenciais do Kerberos do usuário são armazenadas em um arquivo de cache denominado krb5cc_<userid>. Para usar essa credencial de cache, defina o arquivo de configuração JAAS que faz referência à credencial em cache, semelhante ao exemplo anterior.

Exemplos de uso da classe SPNEGOTokenHelper

No primeiro exemplo, um token SPNEGO é obtido para um usuário com base nas Credenciais Nativas do Windows, sob as quais o processo WebSphere está sendo executado.

String nativeToken = SpnegoTokenHelper.buildSpnegoAuthorizationStringFromNativeCreds(spn,  GSSCredential.INDEFINITE_LIFETIME, false); 
Os parâmetros são:
  • spn - ServicePrincipalName do sistema para o qual o token SPNEGO é destinado. Por exemplo, isso pode ser uma sequência como “HTTP/service.host.ibm.com@IBM.COM”
  • Tempo de vida do contexto. No exemplo GSSCredential.INDEFINITE_LIFETIME
  • Delegar - Se o token incluir credenciais delegáveis. No exemplo, o token não incluirá credenciais delegáveis.

O segundo exemplo demonstra o uso de um arquivo keytab ou de credenciais em cache. Neste exemplo, o método mais simples é usado (nenhum tempo de vida é especificado e o token não é delegável)

String token = SpnegoTokenHelper.buildSpnegoAuthorizationFromUpn(spn,upn, jaas);
Os novos parâmetros que são introduzidos no método são:
  • upn - UserPrincipalName da identidade do arquivo. Por exemplo, alice@IBM.COM.
  • Jaas – O nome da configuração JAAS a ser usado (o qual referencia ao keytab do arquivo de credenciais em cache, como “JAASClientUsingKeytab”.

O terceiro exemplo mostra o uso de um ID do usuário e senha para gerar um token Kerberos.

String token = SpnegoTokenHelper.buildSpnegoAuthorizationFromUseridPassword(spn,userid,pwd,1000,true);

Os novos parâmetros introduzidos são ID do usuário e senha. O exemplo também demonstra a solicitação de um token não infinito – o token é gerado para 1000 segundos, e é delegável (o serviço que é associado a esse spn deve ser ativado para delegação).

O quarto exemplo mostra um mecanismo raramente usado, quando você começa com um Subject que contém uma credencial Kerberos. Este exemplo é mostrado para complementação, porém a menos que controle programaticamente a criação do Subject, você provavelmente não usará esse método.

String token = buildSpnegoAuthorizationFromSubject(spn, subject);
O exemplo final mostra o uso da credencial Kerberos do Subject do Responsável pela chamada. Internamente, esse método chama o método anterior.
String token = SpnegoTokenHelper.buildSpnegoAuthorizationFromCallerSubject(spn);

Para obter detalhes adicionais, consulte Geração de tokens SPNEGO para solicitações JAX-WS de saída usando Ligações do conjunto de política do cliente.


Ícone que indica o tipo de tópico Tópico de Referência



Í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=rwbs_generate_spnego_tokens_outbound
Nome do arquivo: rwbs_generate_spnego_tokens_outbound.html