2014-12-11 30 views
5

Próbuję użyć wbudowanego serwera Jetty do ujawnienia mojego interfejsu API odpoczynku, a teraz chciałbym wdrożyć uwierzytelnianie Kerberos. W ten sposób tworzę SecurityHandlerJak korzystać z wbudowanego serwera Jetty Server 9 z uwierzytelnianiem Kerberos?

String domainRealm = "MY.COM"; 

    Constraint constraint = new Constraint(); 
    constraint.setName(Constraint.__SPNEGO_AUTH); 
    constraint.setRoles(new String[]{domainRealm}); 
    constraint.setAuthenticate(true); 

    ConstraintMapping cm = new ConstraintMapping(); 
    cm.setConstraint(constraint); 
    cm.setPathSpec("/*"); 

    SpnegoLoginService loginService = new SpnegoLoginService(); 
    loginService.setConfig("/path/to/spnego.properties"); 
    loginService.setName(domainRealm); 

    ConstraintSecurityHandler sh = new ConstraintSecurityHandler(); 
    sh.setAuthenticator(new SpnegoAuthenticator()); 
    sh.setLoginService(loginService); 
    sh.setConstraintMappings(new ConstraintMapping[]{cm}); 
    sh.setRealmName(domainRealm); 

To jest moje spnego.properties:

targetName = HTTP/target.name.com 

Moi krb5.ini:

[libdefaults] 
default_realm = HW.COM 
default_keytab_name = FILE:/path/to/target.name.com.keytab 
permitted_enctypes = aes128-cts aes256-cts arcfour-hmac-md5 
default_tgs_enctypes = aes128-cts aes256-cts arcfour-hmac-md5 
default_tkt_enctypes = aes128-cts aes256-cts arcfour-hmac-md5 

[realms] 
MY.COM= { 
    kdc = 12.13.14.222 #IP adress 
    admin_server = 12.13.14.222 # IP ADDRESS 
    default_domain = MY.COM 
} 

[domain_realm] 
my.com= MY.COM 
.my.com = MY.COM 

[appdefaults] 
autologin = true 
forwardable = true 

Moja spnego.conf:

com.sun.security.jgss.initiate { 
    com.sun.security.auth.module.Krb5LoginModule required 
    principal="HTTP/[email protected]" 
    keyTab="/path/to/target.name.com.keytab" 
    useKeyTab=true 
    storeKey=true 
    debug=true 
    isInitiator=false; 
}; 

com.sun.security.jgss.accept { 
    com.sun.security.auth.module.Krb5LoginModule required 
    principal="HTTP/[email protected]" 
    useKeyTab=true 
    keyTab="/path/to/target.name.com.keytab" 
    storeKey=true 
    debug=true 
    isInitiator=false; 
}; 

Właściwości systemu są ustawione:

System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); 
    System.setProperty("java.security.auth.login.config", "/path/to/spnego.conf"); 
    System.setProperty("java.security.krb5.conf", "/path/to/krb5.ini"); 

Niestety uwierzytelnianie nie działa. Próbuję debugować metodę SpnegoLoginService.login i logowanie nie powiedzie się z powodu

GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag) 

Czy masz pomysł, w jaki sposób skonfigurować wbudowany serwer Jetty pracować poprawnie z uwierzytelnianiem Kerberos?

Dzięki

Odpowiedz

4

Problem był w złym pliku keytab