2015-07-03 39 views
2

我創建使用彈簧MVC和angularjs的應用程序。對於身份驗證,我已經在數據庫中創建了一個表,並且我正在匹配用戶輸入數據庫中的用戶。但是現在我想使用LDAP進行身份驗證。有人可以幫我解決如何使用angularjs進行LDAP身份驗證的問題。我們如何使用Spring Security LDAP進行與angularjs認證作爲客戶端

在此先感謝。

+0

你檢查有關LDAP身份驗證 - http://docs.spring.io/spring-ldap/docs/current/reference/春天文檔?甚至是本指南 - https://spring.io/guides/gs/authenticating-ldap/? – ingenious

回答

0

我使用LDAP身份驗證與Spring MVC和我的應用程序AngularJs,這裏是我想出...

securityContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:sec="http://www.springframework.org/schema/security" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
      http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd"> 

    <bean id="contextSource" 
      class="org.springframework.ldap.core.support.LdapContextSource"> 
     <property name="anonymousReadOnly" value="false"/> 
     <property name="password" value="${ldap.password}"/> 
     <property name="pooled" value="false"/> 
     <property name="userDn" value="${ldap.userdn}"/> 
     <property name="base" value="${ldap.base}"/> 
     <property name="referral" value="follow"/> 
     <property name="urls"> 
      <list> 
       <value>${ldap.url}</value> 
      </list> 
     </property> 
    </bean> 

    <bean id="entryPoint" class="com.company.ldap.UserAuthenticationEntryPoint"/> 

    <bean id="logoutSuccessHandler" class="com.company.ldap.LdapLogoutSuccessHandler"/> 

    <bean id="userDetailsContextMapper" class="com.company.ldap.LdapUserDetailsContextMapper"/> 

    <bean id="authenticationSuccessHandler" class="com.company.ldap.LdapAuthenticationSuccessHandler"/> 

    <bean id="authenticationFailureHandler" class="com.company.ldap.LdapAuthenticationFailureHandler"/> 

    <sec:http use-expressions="true" 
       auto-config="false" 
       create-session="never" 
       entry-point-ref="entryPoint" 
       authentication-manager-ref="authenticationManager"> 

     <sec:form-login 
       login-processing-url="/login" 
       authentication-success-handler-ref="authenticationSuccessHandler" 
       authentication-failure-handler-ref="authenticationFailureHandler" 
       username-parameter="username" 
       password-parameter="password" 
       login-page="/"/> 

     <sec:intercept-url pattern="/" access="permitAll"/> 
     <sec:intercept-url pattern="/secure/**" access="isAuthenticated()"/> 

     <sec:logout invalidate-session="true" 
        delete-cookies="JSESSIONID" 
        logout-url="/secure/logout" 
        success-handler-ref="logoutSuccessHandler"/> 

     <sec:csrf disabled="true"/> 
     <sec:headers disabled="true"/> 

    </sec:http> 

    <sec:authentication-manager id="authenticationManager"> 
     <sec:ldap-authentication-provider user-search-filter="${ldap.search.filter}" 
              user-context-mapper-ref="userDetailsContextMapper"/> 
    </sec:authentication-manager> 

</beans> 

首先,你需要什麼做的是定義LdapContextSource並設置所有審批值,例如礦山看起來如下:

ldap.url=ldap://ldap-host:389/ 
ldap.userdn=cn=some-cn,cn=Users,dc=dcname,dc=net 
ldap.password=******* 
ldap.base=ou=Users,ou=City,ou=Company,dc=dcname,dc=net 
ldap.search.filter=sAMAccountName={0} 

然後我不得不創建一對夫婦的類來處理登錄成功,sucess註銷,用戶映射等。

對於例如我的身份驗證成功處理程序:

public class LdapAuthenticationSuccessHandler implements AuthenticationSuccessHandler { 

    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) 
      throws IOException, ServletException { 
     RequestDispatcher dispatcher = request.getRequestDispatcher("/secure/user"); 
     dispatcher.forward(request, response); 
    } 
} 

剛剛請求轉發給"/secure/user"成功認證後,這個網址。在那裏,我爲此路徑配置了Spring控制器的方法來返回一些用戶詳細信息。

您可能還需要一個入口點來處理錯誤和UserContextMapper到LDAP中得到一些用戶的詳細信息。這是你如何去實現AuthenticationEntryPointLdapUserDetailsMapper

什麼特別之處其他配置,只是簡單的form-login和殘疾人CSRF及其他安全頭,因爲我並不需要他們對我的應用程序。

請注意,從春季安全4.0.0你必須自己禁用這些標題,如果你不需要他們,他們becouse被默認啓用,而在所有以前的版本,默認情況下,他們被禁用。

希望這會有所幫助。

+0

我一定要添加/使客戶端的任何變化,使我的客戶控制器能夠知道它需要從寫在服務器端的代碼來檢查?另外在我的應用程序中,我使用引導程序的模式服務登錄頁面,所以在我的應用程序/登錄不會在網址中生成。是否需要在url中生成登錄鏈接,或者我們可以使用相同的設置使用bootstrap的模式服務進行身份驗證。 –

+0

是否有可能爲你增添身份驗證入口點代碼和ldapuserdetailsmapper代碼在這裏有我在Java春季新品。 –

相關問題