7
votes

Connexion Kerberos à l'aide du client HTTP

J'écris une connexion HTTP avec l'authentification Kerberos. J'ai "http / 1.1 401 non autorisé". Pourriez-vous me recommander ce que je devrais vérifier? Je pense qu'il y a une astuce quelque chose, mais je ne le vois pas.

Peut-être que je devrais mettre en-tête "www-authentifier" avec "négocier"? P>

Merci beaucoup à l'avancée pour toute aide et idées . P>

public class ClientKerberosAuthentication {

    public static void main(String[] args) throws Exception {

        System.setProperty("java.security.auth.login.config", "login.conf");
        System.setProperty("java.security.krb5.conf", "krb5.conf");
        System.setProperty("sun.security.krb5.debug", "true");
        System.setProperty("javax.security.auth.useSubjectCredsOnly","false");

        DefaultHttpClient httpclient = new DefaultHttpClient();
        try {
           NegotiateSchemeFactory nsf = new NegotiateSchemeFactory();
           httpclient.getAuthSchemes().register(AuthPolicy.SPNEGO, nsf);            

           List<String> authpref = new ArrayList<String>();
           authpref.add(AuthPolicy.BASIC);
           authpref.add(AuthPolicy.SPNEGO);
           httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF, authpref);            


           httpclient.getCredentialsProvider().setCredentials(
                  new AuthScope(null, -1, AuthScope.ANY_REALM, AuthPolicy.SPNEGO), 
                  new UsernamePasswordCredentials("myuser", "mypass"));            

           System.out.println("----------------------------------------");
           HttpUriRequest request = new HttpGet("http://localhost:8084/web-app/webdav/213/_test.docx");
           HttpResponse response = httpclient.execute(request);
           HttpEntity entity = response.getEntity();

           System.out.println("----------------------------------------");
           System.out.println(response.getStatusLine());
           System.out.println("----------------------------------------");
           if (entity != null) {
               System.out.println(EntityUtils.toString(entity));
           }
           System.out.println("----------------------------------------");

           // This ensures the connection gets released back to the manager
           EntityUtils.consume(entity);

        } finally {
           httpclient.getConnectionManager().shutdown();
        }
    }
}


1 commentaires

J'ai écrit une solution alternative à ce problème ici: Stackoverflow.com/a/22865583/381161


3 Réponses :


0
votes

J'ai eu le même problème et je viens de trouver votre message. Je l'ai favorisé afin que je puisse poster une réponse quand je l'ai réparé. Je pose un lien vers ma question où quelqu'un répondit-il, alors si quelqu'un trouve cela via Google, ils trouvent la réponse:

httpclient a un problème de création du SPN pour l'annonce lorsque l'URL a un port.

voir ma question + réponse ici: HttpClient vérifier la page Web sécurisée Kerberos. NTLM Login n'a pas fonctionné


0 commentaires

3
votes

SPNEGO ne fonctionnera pas car vous utilisez localhost en tant que nom d'hôte URL.

Votre serveur est configuré pour un ensemble de SPNS (ou au moins un) commençant par http / enregistré sur le compte de service ActiveDirectory. Vous pouvez les interroger à partir d'une annonce grâce à Sepn -l YourserviceAccount .

Votre URL doit utiliser un nom d'hôte de serveur efficace appelé SPN dans ActiveDirectory, de sorte que Apache HTTP Client puisse négocier un TGS pour ce service et l'envoyer à votre serveur.


0 commentaires

1
votes

Voici un client de test que j'ai écrit dans mon projet. Ce client s'appuie sur tous les types de cryptage à être activés sur JDK,

Si vous voyez la suivi de vos journaux et votre clé de clavier est crypté à 256 bits par défaut ETYPES pour par défaut_tkt_enctypes: 17 16 23 1 3. < / p>

SUIVANT LE JAR http://www.oracle.com/techNetwork /java/javase/downloads/jce-7-download-432124.html Doit être téléchargé et placé dans JDK / JRE / LIB / Security Pour activer le cryptage bit AES256 après que vous devriez voir la suivante dans les journaux par défaut ETYPES pour par défaut_tkt_enctypes: 18 17 16 23 1 3. < / code> xxx

classe utilitaire xxx


0 commentaires