Question

Après avoir demandé cette question, j'ai essayé d'utiliser NegotiateStream pour authentifier un client Windows sur un serveur Java. Il semble que Java n'a pas un grand soutien de la bibliothèque NTLM, donc je travaille sur l'hypothèse que je dois utiliser Kerberos, qui Java semble soutenir beaucoup mieux (via le GSS-API).

Le problème est que NegotiateStream semble essayer d'utiliser chaque fois que NTLM. La documentation suggère qu'il pourrait utiliser non plus, mais ne précise pas comment il choisit. Je ne vois aucune option dans l'API pour contrôler quel mécanisme de son choix. Est-il possible?

Je l'ai moi-même reçu un nom principal et mon code client ressemble à ceci:

string spn = "<service-name>/<my-pc-name>"
TcpClient client = new TcpClient(server, port);
NetworkStream stream = client.GetStream();
NegotiateStream neg = new NegotiateStream(stream, true);
neg.AuthenticateAsClient(CredentialCache.DefaultNetworkCredentials, spn);

Sur la fin du serveur, le premier ensemble d'octets reçus sont 22,1,0,0,59 puis « NTLMSSP. » - que je ne m'y attendais pas

J'ai essayé quelques formats différents pour la chaîne SPN, pas sûr de ce que le format correct est là. Je créé à l'origine le SPN avec

setspn -A <service-name>/<my-pc-name>.<domain-name> <my-user-name>

setspn comme -L répertorie avec succès:

TEST/<my-pc-name>.<domain-name>

Est-ce que je fais quelque chose de mal, ou tout malentendu ce genre de choses? :)

Était-ce utile?

La solution

La syntaxe complète pour un nom SPN est <service>/<user>@DOMAIN; apparemment, il est possible d'omettre le nom de domaine. Toutefois, si le nom d'utilisateur est my-pc-name.domain-name, alors vous ne devriez pas raccourcir davantage. - Fournir le SPN exactement comme spn -L pour vous liste

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top