我創建使用彈簧MVC和angularjs的應用程序。對於身份驗證,我已經在數據庫中創建了一個表,並且我正在匹配用戶輸入數據庫中的用戶。但是現在我想使用LDAP進行身份驗證。有人可以幫我解決如何使用angularjs進行LDAP身份驗證的問題。我們如何使用Spring Security LDAP進行與angularjs認證作爲客戶端
在此先感謝。
我創建使用彈簧MVC和angularjs的應用程序。對於身份驗證,我已經在數據庫中創建了一個表,並且我正在匹配用戶輸入數據庫中的用戶。但是現在我想使用LDAP進行身份驗證。有人可以幫我解決如何使用angularjs進行LDAP身份驗證的問題。我們如何使用Spring Security LDAP進行與angularjs認證作爲客戶端
在此先感謝。
我使用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中得到一些用戶的詳細信息。這是你如何去實現AuthenticationEntryPoint和LdapUserDetailsMapper
什麼特別之處其他配置,只是簡單的form-login
和殘疾人CSRF及其他安全頭,因爲我並不需要他們對我的應用程序。
請注意,從春季安全4.0.0你必須自己禁用這些標題,如果你不需要他們,他們becouse被默認啓用,而在所有以前的版本,默認情況下,他們被禁用。
希望這會有所幫助。
我一定要添加/使客戶端的任何變化,使我的客戶控制器能夠知道它需要從寫在服務器端的代碼來檢查?另外在我的應用程序中,我使用引導程序的模式服務登錄頁面,所以在我的應用程序/登錄不會在網址中生成。是否需要在url中生成登錄鏈接,或者我們可以使用相同的設置使用bootstrap的模式服務進行身份驗證。 –
是否有可能爲你增添身份驗證入口點代碼和ldapuserdetailsmapper代碼在這裏有我在Java春季新品。 –
你檢查有關LDAP身份驗證 - http://docs.spring.io/spring-ldap/docs/current/reference/春天文檔?甚至是本指南 - https://spring.io/guides/gs/authenticating-ldap/? – ingenious