2012-08-15 16 views
6

Ostatecznie skonfigurowałem mój serwer JBoss AS 7 do używania SPNEGO w domenie AD na Windows 2008 R2. Używam języka Java 7.W jaki sposób mogę przywrócić uwierzytelnianie BASIC lub FORM, gdy nie można użyć SPNEGO dla klienta?

Gdy użytkownik uzyskuje dostęp do adresu URL serwera z innego niż komputer domeny (powiedzmy, z telefonu komórkowego lub z szerszego Internetu), jest monitowany o podanie nazwy użytkownika i hasła, a następnie pojawia się komunikat błąd:

Login failure: javax.security.auth.login.LoginException: Unsupported negotiation mechanism 'NTLM' 

Gdy użytkownik uzyskuje dostęp do adresu URL po zalogowaniu się w domenie, wszystko jest w porządku.

na bezpieczeństwo domeny SPNEGO (standalone.xml) I skonfigurowany 2 login-moduły:

pierwsze: org.jboss.security.negotiation.spnego.SPNEGOLoginModule

drugie:

<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required"> 
    <module-option name="password-stacking" value="useFirstPass"/> 
    <module-option name="usersProperties" value="file:${jboss.server.config.dir}/spnego-users.properties"/> 
    <module-option name="rolesProperties" value="file:${jboss.server.config.dir}/spnego-roles.properties"/> 
    <module-option name="defaultUsersProperties" value="file:${jboss.server.config.dir}/spnego-users.properties"/> 
    <module-option name="defaultRolesProperties" value="file:${jboss.server.config.dir}/spnego-roles.properties"/> 
</login-module> 

Pytanie brzmi: Jak mogę Przenieś się BASIC lub FORM, gdy SPNEGO jest poza zakresem?

Dzięki

Pełna wyjątek następująco:

00:40:23,751 ERROR [org.jboss.security.authentication.JBossCachedAuthenticationManager] (http--0.0.0.0-9090-8) Login failure: javax.security.auth.login.LoginException: Unsupported negotiation mechanism 'NTLM'. 
     at org.jboss.security.negotiation.spnego.SPNEGOLoginModule.spnegoLogin(SPNEGOLoginModule.java:230) [jboss-negotiation-spnego-2.2.0.SP1.jar:2.2.0.SP1] 
     at org.jboss.security.negotiation.spnego.SPNEGOLoginModule.innerLogin(SPNEGOLoginModule.java:194) [jboss-negotiation-spnego-2.2.0.SP1.jar:2.2.0.SP1] 
     at org.jboss.security.negotiation.spnego.SPNEGOLoginModule.login(SPNEGOLoginModule.java:137) [jboss-negotiation-spnego-2.2.0.SP1.jar:2.2.0.SP1] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_05] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_05] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_05] 
     at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_05] 
     at javax.security.auth.login.LoginContext.invoke(LoginContext.java:784) [rt.jar:1.7.0_05] 
     at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203) [rt.jar:1.7.0_05] 
     at javax.security.auth.login.LoginContext$4.run(LoginContext.java:698) [rt.jar:1.7.0_05] 
     at javax.security.auth.login.LoginContext$4.run(LoginContext.java:696) [rt.jar:1.7.0_05] 
     at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_05] 
     at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:695) [rt.jar:1.7.0_05] 
     at javax.security.auth.login.LoginContext.login(LoginContext.java:594) [rt.jar:1.7.0_05] 
     at org.jboss.security.authentication.JBossCachedAuthenticationManager.defaultLogin(JBossCachedAuthenticationManager.java:449) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final] 
     at org.jboss.security.authentication.JBossCachedAuthenticationManager.proceedWithJaasLogin(JBossCachedAuthenticationManager.java:383) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final] 
     at org.jboss.security.authentication.JBossCachedAuthenticationManager.authenticate(JBossCachedAuthenticationManager.java:371) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final] 
     at org.jboss.security.authentication.JBossCachedAuthenticationManager.isValid(JBossCachedAuthenticationManager.java:160) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final] 
     at org.jboss.as.web.security.JBossWebRealm.authenticate(JBossWebRealm.java:214) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.security.negotiation.NegotiationAuthenticator.authenticate(NegotiationAuthenticator.java:187) [jboss-negotiation-common-2.2.0.SP1.jar:2.2.0.SP1] 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:455) [jbossweb-7.0.13.Final.jar:] 
     at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 
     at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_05] 

Odpowiedz

1

Szczerze mówiąc, chciałbym zaproponować Ci użyciu Wiosna Security z rozszerzeniem SPNEGO. Proszę zobaczyć coś takiego: http://blog.springsource.org/2009/09/28/spring-security-kerberos/

Po tym można mieć więcej dostawców uwierzytelniania.

wzmianka pochodzi z: Multiple Authentication Providers in Spring Security

Można określić, jak wielu dostawców, jak chcesz. Będą one sprawdzane w tej samej kolejności, w jakiej je zadeklarowałeś, w tagu menedżera uwierzytelniania. Po pomyślnym uwierzytelnieniu zostanie zatrzymane pobieranie wiadomości od dostawców. Jeśli dowolny dostawca wyrzuci wyjątek AccountStatusException, spowoduje to również przerwanie pollingu.

W ten sposób nie będziesz zależny od konkretnej konfiguracji serwera aplikacji.

0

będzie trzeba zmodyfikować plik WEB-INF/web.xml awaryjnej na podstawowy:

<context-param> 
    <description>BASIC Authentication FallBack</description> 
    <param-name>org.jboss.security.negotiation.NegotiationAuthenticator.BasicAuthFallBack</param-name> 
    <param-value>true</param-value> 
</context-param> 

Zobacz tutaj szczegóły:

https://issues.jboss.org/browse/SECURITY-793

Powiązane problemy