Sådan forbinder du til en REST-tjeneste, der kræver Windows-klient-godkendelse fra Java?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gerne få adgang til en REST-tjeneste fra Java. Tjenesten kører under Windows og bruger sandsynligvis en 'standard' godkendelsesmekanisme. Jeg fik at vide, at det var Kerberos med en tilbagesendelse til NTLM. Jeg kan få adgang til tjenesten ved en almindelig HTTPS GET-anmodning ved hjælp af Firefox (fungerer også med HttpRequester) - uden at angive nogen legitimationsoplysninger eksplicit (naturligvis bruges min Windows-konto).


Hvordan kan jeg få adgang til tjenesten fra Java? Et naivt forsøg på at læse ved hjælp af java.net.URL mislykkes med statuskode 400.

Bedste reference


Selv JDK (JVM implementering af Oracle) tilbyder dette, kan du se et besøg på https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part6.html[3]

Andre referencer 1


Dette giver trin på højt niveau for løsningen. Du skal bruge Active Directory for at udnytte Kerberos med Windows. Så hvad du vil gøre er at bruge Java Spring Security for Kerberos for at få adgang til REST-tjenesten fra Java. Nedenfor er de mere konkrete trin.



  1. Java Spring Security til Kerberos-biblioteket vil gøre den tunge løft for dig, hvilket giver en klasse til at injicere en Kerberos-konfiguration i HTTP-klienten: org.springframework.security.kerberos.client.KerberosRestTemplate

  2. Du definerer nogle Kerberos-egenskaber i en klientkonfiguration .properties-fil. Her er det vigtigste kodestykke fra filen med hensyn til Kerberos:




KERBEROS.FLAG=Y
KERBEROS.DEBUG=true
SERVICE\_ACCOUNT\_PRINCIPAL = HTTP/some.hostname@YOUR.REALM
KEYTAB\_LOCATION = file:///C:/path/to/filename.keytab
KDC = server.fqdn.name
KDC\_DOMAIN = YOUR.REALM
KRB5 = file:///C:/path/to/krb5.conf



REDIGERE:


Kerberos keytabs er ikke påkrævet med en Java-klient på en Windows AD domæne-tilsluttet maskine. Da du vil bruge legitimationsoplysningerne til den person, der kører Java-programmet, ville du ikke bruge et keytab (da keytabet kun indeholder én legitimation).


Se den officielle Spring Security Website [4]