Après avoir demandé this question, j'ai essayé d'utiliser NegotiateStream pour authentifier un client Windows par rapport à un serveur Java. Il semble que Java ne supporte pas bien la bibliothèque NTLM, donc j'ai supposé que je devais utiliser Kerberos, ce que Java semble bien mieux supporter (via l'API GSS).Comment obtenir NegotiateStream pour utiliser Kerberos?
Le problème est que NegotiateStream semble essayer d'utiliser NTLM à chaque fois. La documentation suggère qu'il pourrait utiliser l'un ou l'autre, mais ne précise pas comment il choisit. Je ne vois aucune option dans l'API pour contrôler le mécanisme qu'elle choisit. Y a-t-il un moyen?
J'ai eu moi-même 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 et puis "NTLMSSP" - que je n'attendais pas.
J'ai essayé quelques formats différents pour la chaîne SPN, je ne sais pas quel est le bon format. Je créé à l'origine le SPN avec
setspn -A <service-name>/<my-pc-name>.<domain-name> <my-user-name>
SETSPN liste avec succès comme:
TEST/<my-pc-name>.<domain-name>
Est-ce que je fais quelque chose de mal, ou malentendu tout à fait ce genre de choses? :)
Quel système d'exploitation utilisez-vous? –
En outre, qu'utilisez-vous en tant que myServicePrincipalName? –
Cela fonctionne sur Vista64 dès maintenant. Je suis un peu confus sur le bon format pour myServicePrincipalName tbh - J'ai essayé quelques variantes! J'ai créé le SPN avec ceci: setspn -A TEST/. Je ne suis pas sûr si c'est vrai non plus! : S Il a enregistré le SPN, et je peux le regarder avec spn -L qui énumère TEST/. Etant donné cela, j'essayais aussi "TEST/my-pc-name", "TEST/mon-nom d'utilisateur" et les deux avec le nom de domaine à la fin. Évidemment, beaucoup de conjectures se passe, je n'ai pas trouvé une grande documentation :( –