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(); } } }
3 Réponses :
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: p>
httpclient a un problème de création du SPN pour l'annonce lorsque l'URL a un port. P>
voir ma question + réponse ici: HttpClient vérifier la page Web sécurisée Kerberos. NTLM Login n'a pas fonctionné P>
SPNEGO ne fonctionnera pas car vous utilisez Votre serveur est configuré pour un ensemble de SPNS (ou au moins un) commençant par 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. P> localhost code> en tant que nom d'hôte URL. P>
http / code> enregistré sur le compte de service ActiveDirectory. Vous pouvez les interroger à partir d'une annonce grâce à
Sepn -l YourserviceAccount code>. P>
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 SUIVANT LE JAR
http://www.oracle.com/techNetwork /java/javase/downloads/jce-7-download-432124.html
Doit être téléchargé et placé dans classe utilitaire p> par défaut_tkt_enctypes: 17 16 23 1 3. Code> < / p>
JDK / JRE / LIB / Security CODE> 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> p>
J'ai écrit une solution alternative à ce problème ici: Stackoverflow.com/a/22865583/381161