1

J'essaie d'utiliser le client http de jakarta commons. Faire l'authentification kerberos pour communiquer avec un serveur. L'authentification échoue toujours. En creusant plus profondément, j'ai découvert que l'en-tête kerberos possède des caractères de retour de ligne chariot qui sont la cause première du problème. Pourquoi a-t-il des caractères et pourquoi est-ce un problème?client http commons - jeton kerberos lors de la négociation a r n (chariot retour ligne feed) caractères

Répondre

2

Les caractères du jeton kerberos sont un problème car \ r est un caractère de contrôle HTTP. Cela signifie essentiellement que le serveur ne voit que la première ligne du jeton et ignore le repos, d'où l'échec de l'authentification. Pour empirer les choses, les goûts suivants du jeton sont traités comme de nouveaux en-têtes et ne seront pas bien formatés. Donc, le serveur http va paniquer. La raison pour laquelle cela se produit est que la spécification RFC 1521 indique que la longueur de la ligne de codage base64 est limitée à 76 caractères. D'où \ r \ n caractères. Et cela ne fonctionne pas bien avec le protocole HTTP. Cela ne surface que si vous utilisez des jetons Kerberos codés en base64.

La solution consiste donc à supprimer les caractères de l'en-tête codé kerberos base64. De plus, les anciennes versions du codec apache commons ne limiteront pas le codage en base64 à 76 lignes et ne poseront donc aucun problème. Donc, si vous avez un crochet dans l'encodage, supprimez les caractères problématiques. Si vous ne l'utilisez pas, utilisez une version plus ancienne du code apache commons avec commons-httpclient.

Questions connexes