2013-08-08 65 views
5

Tôi biết điều này đã được yêu cầu, nhưng tôi không thể làm cho nó hoạt động. Đây là những gì tôi muốn hoàn thành:Bảo mật mùa xuân 3.2 Xác thực mã thông báo

Tôi đang sử dụng Spring Security 3.2 để bảo mật dịch vụ giống như REST. Không có phiên phía máy chủ. Tôi không sử dụng auth cơ bản, vì điều đó có nghĩa là tôi cần phải lưu trữ mật khẩu của người dùng trong một cookie ở phía máy khách. Nếu không, người dùng sẽ cần phải đăng nhập với mỗi lần làm mới/thay đổi trang. Lưu trữ một mã thông báo là tôi đoán cái ác ít hơn.

  1. Một khách hàng web (trình duyệt, ứng dụng di động) gọi một URL REST như đăng nhập "/ đăng nhập" với username và password
  2. Máy chủ xác thực người dùng và gửi một mã thông báo lại cho khách hàng
  3. các khách hàng lưu trữ các thẻ và thêm nó vào tiêu đề yêu cầu http với mỗi cuộc gọi api
  4. các máy chủ sẽ kiểm tra tính hợp lệ của thẻ và gửi một phản ứng phù hợp

tôi thậm chí còn không nhìn vào phần thế hệ thẻ chưa . Tôi biết nó là ngược, nhưng tôi muốn nhận được phần xác nhận mã thông báo được triển khai trước tiên.

Tôi đang cố gắng thực hiện điều này bằng cách sử dụng trình chỉnh sửa tùy chỉnh (triển khai AbstractAuthenticationProcessingFilter), tuy nhiên dường như tôi có ý tưởng sai về nó.

Xác định nó như thế này:

public TokenAuthenticationFilter() { 
    super("/"); 
} 

sẽ chỉ kích hoạt các bộ lọc cho URL này chính xác. Tôi đang gắn bó với một số triển khai mẫu, nơi nó gọi AbstractAuthenticationProcessingFilter # requireAuthentication không chấp nhận ký tự đại diện. Dĩ nhiên tôi có thể thay đổi hành vi đó, nhưng điều này làm cho tôi nghĩ rằng tôi đang đi sai đường.

Tôi cũng bắt đầu triển khai Trình xác thực tùy chỉnh. Có lẽ đó là điều đúng? Ai đó có thể đẩy tôi đi đúng hướng không?

+1

Tôi cố gắng làm chính xác điều tương tự .. bạn đã thành công với bảo mật mùa xuân chưa? bạn có thể vui lòng chi tiết giải pháp của bạn? – fvisticot

+0

Bạn đã tìm thấy giải pháp chưa? – sinu

Trả lời

1

Tôi nghĩ rằng bộ lọc xác thực trước phù hợp hơn với kịch bản của bạn. Ghi đè phương thức getPrincipal và getCredentials của AbstractPreAuthenticatedProcessingFilter. Trong trường hợp mã thông báo không có trong tiêu đề, trả về null từ getPrincipal.

Lưu lượng:

  • người dùng đăng nhập lần đầu tiên, không có tiêu đề thông qua, vì vậy không có đối tượng xác thực đặt trong securityContext, bình thường quá trình xác thực sau tức là ExceptionTranslation lọc redirtects người dùng đến/đăng nhập trang dựa trên bộ lọc đăng nhập biểu mẫu hoặc xác thực tùy chỉnh của bạnEntryPoint
  • Sau khi xác thực thành công, yêu cầu xác thực người dùng, bộ lọc xác thực trước nhận mã thông báo từ đối tượng xác thực tiêu đề được đặt trong securityC ontext, nếu người dùng có quyền truy cập, anh ta được phép truy cập an toàn url
Các vấn đề liên quan