Criando Tokens SPNEGO para Clientes de Serviço da Web J2EE, .NET e Java™ para Solicitações de HTTP
Você pode criar um token Simple and Protected GSS-API Negotiation (SPNEGO) para seus aplicativos e inserir este token nos cabeçalhos HTTP para autenticação no WebSphere Application Server.
Procedimento
- Crie uma credencial GSS de cliente. Escolha uma das 4 opções a seguir:
- Crie uma credencial GSS para o cache de credenciais Kerberos. Por Exemplo:
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); Oid krb5MechOid = new Oid("1.2.840.113554.1.2.2"); Oid spnegoMechOid = new Oid("1.3.6.1.5.5.2"); GSSManager manager = GSSManager.getInstance(); GSSName gssUserName = manager.createName(userName, GSSName.NT_USER_NAME, krb5MechOid); clientGssCreds = manager.createCredential(gssUserName.canonicalize(krb5MechOid), GSSCredential.INDEFINITE_LIFETIME, krb5MechOid, GSSCredential.INITIATE_ONLY); clientGssCreds.add (gssUserName, GSSCredential.INDEFINITE_LIFETIME, GSSCredential.INDEFINITE_LIFETIME, spnegoMechOid, GSSCredential.INITIATE_ONLY);
- Crie uma credencial GSS a partir de um assunto que possui bilhetes Kerberos. Por Exemplo:
Oid krb5MechOid = new Oid("1.2.840.113554.1.2.2"); Oid spnegoMechOid = new Oid("1.3.6.1.5.5.2"); GSSManager manager = GSSManager.getInstance(); clientGssCreds = (GSSCredential) Subject.doAs(subject, new PrivilegedExceptionAction() { public Object run() throws GSSException, Exception { try { gssName = manager.createName( userName, GSSName.NT_USER_NAME, getKrb5MechOid()); GSSCredential gssCred = manager.createCredential( gssName.canonicalize(krb5MechOid), GSSCredential.DEFAULT_LIFETIME, krb5MechOid, GSSCredential.INITIATE_ONLY); gssCred.add (gssUserName, GSSCredential.INDEFINITE_LIFETIME, GSSCredential.INDEFINITE_LIFETIME, spnegoMechOid, GSSCredential.INITIATE_ONLY); return gssCred; } catch (GSSException gsse) { } catch (Exception e) { } return null; } });
- Crie uma credencial GSS depois de chamar o módulo de login
WSKRB5Login. Por Exemplo:
Oid krb5MechOid = new Oid("1.2.840.113554.1.2.2"); Oid spnegoMechOid = new Oid("1.3.6.1.5.5.2"); System.setProperty("javax.security.auth.useSubjectCredsOnly", "true"); GSSManager manager = GSSManager.getInstance(); GSSName gssUserName = manager.createName(userName, GSSName.NT_USER_NAME, krb5MechOid); clientGssCreds = manager.createCredential(gssUserName.canonicalize(krb5MechOid), GSSCredential.INDEFINITE_LIFETIME, krb5MechOid, GSSCredential.INITIATE_ONLY); clientGssCreds.add (gssUserName, GSSCredential.INDEFINITE_LIFETIME, GSSCredential.INDEFINITE_LIFETIME, spnegoMechOid, GSSCredential.INITIATE_ONLY);
- Crie uma credencial GSS usando o cache de credenciais Kerberos nativo da Microsoft. Por Exemplo:
Oid krb5MechOid = new Oid("1.2.840.113554.1.2.2"); Oid spnegoMechOid = new Oid("1.3.6.1.5.5.2"); System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); GSSManager manager = GSSManager.getInstance(); clientGssCreds = manager.createCredential(null, GSSCredential.INDEFINITE_LIFETIME, krb5MechOid, GSSCredential.INITIATE_ONLY); clientGssCreds.add(null, GSSCredential.INDEFINITE_LIFETIME, GSSCredential.INDEFINITE_LIFETIME, spnegoMechOid, GSSCredential.INITIATE_ONLY);
Nota: O cache de credenciais MSLSA: depende da capacidade de extração de todo o bilhete Kerberos, incluindo a chave da sessão do Kerberos LSA. . Em uma tentativa de aumentar a segurança, a Microsoft começou a implementar um recurso pelo qual ela não exporta mais as chaves de sessão para Ticket Getting Tickets, o que pode torná-las inutilizáveis para o IBM® JGSS quando forem feitas tentativas de solicitar bilhetes de serviço adicionais. Esse novo recurso foi visto no Windows 2003 Server e no Windows XP SP2 Beta. 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)
No Windows XP SP2 Beta 1, a chave é especificada como:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos AllowTGTSessionKey = 0x01 (DWORD)
- Crie uma credencial GSS para o cache de credenciais Kerberos. Por Exemplo:
- Depois de ter criado uma credencial GSS de cliente, agora você pode criar
o token SPNEGO e inseri-lo no cabeçalho HTTP como no seguinte exemplo:
// crie o SPN do servidor de destino GSSName gssServerName = manager.createName(targetServerSpn, GSSName.NT_USER_NAME); GSSContext clientContext = manager.createContext(gssServerName.canonicalize(spnegoMechOid), spnegoMechOid, clientGssCreds, GSSContext.DEFAULT_LIFETIME); // delegação de ativação de credencial GSS opcional clientContext.requestCredDeleg(true); byte[] spnegoToken = new byte[0]; // crie um token SPNEGO para o servidor de destino spnegoToken = clientContext.initSecContext(spnegoToken, 0, spnegoToken.length); URL url = new URL(targetUrl); HttpURLConnection con= (HttpURLConnection) url.openConnection(); try { // insira o token SPNEGO no cabeçalho HTTP con.setRequestProperty("Authorization", "Negotiate " + Base64.encode(spnegoToken)); con.getResponseCode(); } catch (IOException e) { } catch (Exception ex) { }
Resultados
Seu aplicativo pode precisar de um arquivo de configuração do Kerberos (krb5.ini ou krb5.conf). Leia sobre Criando um Arquivo de Configuração do Kerberos para obter
informações adicionais.
Tarefas relacionadas:
Referências relacionadas:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_SPNEGO_token
Nome do arquivo: tsec_SPNEGO_token.html