2009-11-05 12 views
6

Yêu cầu của tôi là cung cấp:Tôi có thể đặt 3 sơ đồ xác thực khác nhau trong cùng một cấu hình bảo mật mùa xuân không?

  1. Xác thực dựa trên mật khẩu người dùng.
  2. mở xác thực dựa id
  3. Url xác thực dựa (một phong tục của nó sso impl chúng tôi có)

trong cùng một dự án.

Tôi đã thử cắm vào an ninh mùa xuân vào một dự án hiện như (mã tước xuống vì đơn giản):

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

    <http auto-config="false"> 
     <remember-me user-service-ref="rememberMeUserService" key="some custom key" /> <!-- TODO: Key made for testing reasons.... --> 
     <intercept-url pattern='/mainApplication/Main screen.html' access="ROLE_ADMIN"/> 
     <intercept-url pattern='/**' filters="none"/> <!-- Allow entry to login screen --> 
     <openid-login authentication-failure-url="/Login.html?error=true" default-target-url="/mainApplication/Main screen.html" user-service-ref="openIdUserService"/> 
     <form-login login-page="/Login.html" authentication-failure-url="/Login.html?error=true" always-use-default-target="true" default-target-url="/mainApplication/Main screen.html"/> 
    </http> 

    <beans:bean id="rememberMeUserService" class="mypackage.CustomUserService"> 
     <beans:property name="usersService" ref="usersService"></beans:property> 
    </beans:bean> 

    <!-- Common login shared entry-point for both Form and OpenID based logins -->  
    <beans:bean id="entryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint"> 
     <beans:property name="loginFormUrl" value="/Login.html" /> 
    </beans:bean> 
    <authentication-manager alias="authenticationManager"/> 

    <beans:bean id="MyCustomAuthenticationProvider" class="mypackage.CustomAuthenticationProvider"> 
     <custom-authentication-provider /> 
     <beans:property name="usersService" ref="usersService"></beans:property> 
    </beans:bean> 

    <beans:bean id="openIdAuthenticationProvider" class="org.springframework.security.providers.openid.OpenIDAuthenticationProvider"> 
     <custom-authentication-provider /> 
     <beans:property name="userDetailsService" ref="openIdUserService"/> 
    </beans:bean> 

    <beans:bean id="openIdUserService" class="mypackage.OpenIDUserDetailsService"> 
     <beans:property name="usersService" ref="usersService"/> 
    </beans:bean> 

    <!-- Great, now i want to include SSO based sign on --> 
    <!-- need to intercept a url of the form : /myApp/customLogin/<key> where <key> is my token key --> 

</beans:beans> 

như đã đề cập ở trên, tôi cần phải theo dõi một url có dạng:/MyApp/customLogin/12345 nơi 1235 là chìa khóa mã thông báo, chúng tôi đã bước đầu sử dụng (mã tước xuống vì đơn giản)

<servlet-mapping> 
    <servlet-name>mySSOCapture</servlet-name> 
    <url-pattern>/myApp/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>MyServlet</servlet-name> 
    <url-pattern>/MyServlet</url-pattern> 
</servlet-mapping> 

gì tôi nên làm gì đây để kích hoạt tính năng an ninh mùa xuân để giúp tôi quản lý chương trình xác thực thứ ba này?

câu hỏi về hệ quả là: tôi có thể có nhiều nhà cung cấp xác thực trong cùng một dự án không? nếu có, thì làm thế nào chúng có thể được kết hợp với các chức năng khác nhau (ví dụ: một chức năng cung cấp xác thực dựa trên url, một cung cấp auth độc lập, vv)?

+0

sso: Single Sign trên (người dùng được xác thực bởi chỉ có một token). Bản đồ servlet được viết ở trên nằm trong tệp web.xml của tôi. Xác thực id mở và xác thực mật khẩu tên người dùng đang hoạt động tốt. Trang đăng nhập của tôi chứa hai biểu mẫu một để đăng nhập bình thường và một cho đăng nhập dựa trên id mở. –

Trả lời

1

Được rồi, đây là giải pháp:

<beans:bean id="mySsoFilter" class="somePackage.MySsoProcessingFilter"> 
    <custom-filter after="CAS_PROCESSING_FILTER"/> <!-- Just a reference Point--> 
    <beans:property name="authenticationManager" ref="authenticationManager"/> 
    <beans:property name="defaultTargetUrl" value='/mainApplication/Main screen.html' /> 
    <beans:property name="authenticationFailureUrl" value="/Login.html?error=true"/> 
</beans:bean> 

Hy vọng điều này sẽ giúp người có nhu cầu ...

+0

giống như tôi đã sử dụng "sau", tôi cũng đã sử dụng "trước" để thêm SSO khác !! Xin lưu ý rằng CAS không liên quan gì đến hệ thống của tôi. –

1

Không thể trả lời câu hỏi trực tiếp, nhưng 'gợi ý hữu ích' từ lĩnh vực Quản lý danh tính: Không phải tất cả các hệ thống xác thực đều có cùng giá trị tin cậy - Đó là một vi phạm nghiêm trọng về thiết kế bảo mật tốt để đối xử bình đẳng.

Tôi hy vọng điều này sẽ giúp với thiết kế của bạn ...

+0

tốt, nó có thêm một kích thước triết học cho câu hỏi của tôi: D tôi không thấy điểm của câu trả lời này mặc dù –

+0

Tôi đã chỉ đề xuất một cái gì đó để tìm cho ra.Xin lỗi nếu nó không áp dụng cho bạn. – caving

1

Có thể có một số cách để thực hiện việc này. Có một số chức năng làm điều gì đó rất giống nhau, cụ thể là Pre-authentication. Đó là một ví dụ tốt về cách bạn có thể thêm bộ lọc tùy chỉnh xác thực người dùng, sau đó phần còn lại của khung phải tiếp quản.

Điều AuthenticationProvider thực hiện là kiểm tra đối tượng Authentication được bộ lọc trước đó tải vào phiên. Bạn có thể đăng ký nhiều nhà cung cấp xác thực như bạn muốn với trình quản lý xác thực (chỉ cần chạy đối tượng Authentication thông qua tất cả chúng), nhưng bạn phải quản lý để có một số bộ lọc trong đó sẽ xử lý lược đồ xác thực của bạn và điền đối tượng Authentication. Nếu bạn muốn bộ lọc này cũng tương tác với người dùng (ví dụ: hiển thị biểu mẫu đăng nhập hoặc thứ gì đó), bộ lọc có thể ảnh hưởng đến các bộ lọc khác. Trong trường hợp đó, bạn có thể sử dụng các chuỗi bộ lọc riêng biệt, nhưng điều này có vẻ không cần thiết trong trường hợp của bạn.

+0

Tôi đọc về PreAuthentication, tôi nghĩ rằng bạn đang nhầm lẫn với câu hỏi của tôi, tôi muốn cho phép người dùng đăng nhập bằng 3 cách khác nhau: tên người dùng/mật khẩu, Id mở, SSO. –

+0

Tôi đánh giá cao thông tin bổ sung về các nhà quản lý xác thực, thông tin đó đã xóa một số vấn đề cơ bản của tôi, tôi không chắc chắn về ý nghĩa của bạn về chuỗi bộ lọc. –

+0

Xin lỗi tôi đã tìm ra sơ đồ đăng nhập của bạn quá khác so với phần còn lại để có thể vừa với nó ở đó. Đối với chuỗi bộ lọc, về cơ bản có một chuỗi các bộ lọc bảo mật mùa xuân mà tất cả các yêu cầu đều đi qua, nhưng nếu cần thiết, bạn có thể thiết lập hai hoặc nhiều hơn, lọc trên các URL khác nhau. Bằng cách đó bạn có thể sử dụng các bộ lọc/cơ chế xác thực hoàn toàn khác nhau, nhưng nó phức tạp hơn một chút. – wds

Các vấn đề liên quan