Pregunta

Después de esta pregunta , he estado tratando de utilizar NegotiateStream para autenticar un cliente de Windows en un servidor Java. Parece que Java no tiene un gran apoyo biblioteca NTLM, por lo que he estado trabajando en el supuesto de que tendría que utilizar Kerberos, que parece Java para apoyar mucho mejor (a través de la GSS-API).

El problema es que NegotiateStream parece estar tratando de utilizar NTLM cada vez. La documentación sugiere que podría utilizar, pero no especifica cómo se elige. No puedo ver ninguna opción en la API para controlar qué mecanismo que elija. ¿Hay alguna manera?

Yo mismo tengo un nombre principal de servicio y mi código de cliente se ve así:

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);

En el lado del servidor, el primer conjunto de bytes recibidos se 22,1,0,0,59 y luego "NTLMSSP" -. Que yo no esperaba

He intentado un par de formatos diferentes para la cadena SPN, no está seguro de lo que el formato correcto es allí. Originalmente creado con el SPN

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

setspn -l lista con éxito como:

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

¿Estoy haciendo algo mal, o completamente malentendido esto? :)

¿Fue útil?

Solución

La sintaxis completa para un nombre de SPN es <service>/<user>@DOMAIN; Aparentemente, es posible omitir el nombre de dominio. Sin embargo, si el nombre de usuario es my-pc-name.domain-name, entonces no debería acortar aún más -. Proporcione el SPN exactamente como spn -L enumera a usted

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top