2013-06-20 42 views
13

Tôi thấy rất khó để khôi phục mật khẩu vì tôi chưa bao giờ thực hiện trước đó.Hướng dẫn triển khai khôi phục mật khẩu bảo mật mùa xuân bằng URL động được gửi tới email

Cho đến nay tôi có ứng dụng web có:

Bảo mật mùa xuân, nơi mật khẩu được băm đúng và vai trò người dùng được triển khai và hoạt động chính xác.

Chiến lược gợi ý nghiên cứu từ stackoverflow: nút

  1. hits tài khoản quên mật khẩu, nơi ông đi vào địa chỉ email của mình.
  2. liên kết động sẽ được gửi đến địa chỉ email
  3. tài khoản mở liên kết trong địa chỉ email
  4. nào chuyển hướng anh ta thiết lập lại trang mật khẩu

gì không biết:

  • Làm thế nào để cung cấp cho liên kết năng động tự nhiên - phương pháp của các thế hệ
  • Link có một thời gian chờ - một số câu hỏi đã được tìm thấy ở đây, nhưng thường liên quan đến xử lý tùy chỉnh hoặc gia hạn đến mùa xuân giây chức năng tinh khiết
  • Một phương thức ánh xạ yêu cầu để phản hồi liên kết động như vậy
  • Phương pháp lưu trữ liên kết tạm thời - cơ sở dữ liệu, phiên, v.v ...?

Như bạn có thể thấy danh sách này khá nghiêm trọng đối với một câu hỏi. Vì vậy, đã hy vọng bạn có thể cung cấp tài nguyên hướng dẫn để làm thế nào để làm điều đó từng bước. Tôi hơi ngạc nhiên khi tôi không thể tìm thấy nhiều về điều này trong tài liệu của Spring Security. Cảm ơn.

Tôi là sinh viên nên không biết thực sự hoạt động tốt nhất ngành công nghiệp để làm như vậy đặc biệt là trong bối cảnh của Java, vì vậy tôi thực sự hy vọng bất cứ ai cũng có thể giúp đỡ.

+0

Tôi đã triển khai dự án JAVA cho trường hợp sử dụng này. Đó là trên GitHub, mã nguồn mở. Bạn có thể xem: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows – OhadR

Trả lời

18

Vấn đề không thực sự có nhiều việc phải làm với Xuân An. Cung cấp cho bạn biết cấu trúc của cơ sở dữ liệu người dùng và bộ mã hóa mật khẩu được sử dụng, nó thực sự chỉ thực hiện một quy trình làm việc liên quan đến truy cập dữ liệu, bộ điều khiển web và gửi email. Liên kết phải chứa chuỗi mã thông báo ngẫu nhiên (ví dụ: sử dụng SecureRandom và bộ mã hóa base64) và nó sẽ được lưu trữ trong cơ sở dữ liệu với userId và dấu thời gian (để xác thực cửa sổ trong đó liên kết hợp lệ). Bộ điều khiển sẽ trích xuất mã thông báo từ yêu cầu đến, tải dữ liệu từ cơ sở dữ liệu bằng mã thông báo. Nó sẽ kiểm tra dấu thời gian và sau đó chuyển tiếp người dùng đến một biểu mẫu nhập mật khẩu. Tùy thuộc vào yêu cầu, bạn cũng có thể muốn họ trả lời một số câu hỏi bảo mật khác. Sau đó bạn sẽ xác nhận và mã hóa mật khẩu và lưu trữ nó trong tài khoản phù hợp với userId được lưu trữ trong bảng liên kết đặt lại. Nó cũng sẽ có ý nghĩa để có một công việc hàng loạt chạy để loại bỏ các liên kết hết hạn từ cơ sở dữ liệu.

Các Grails Xuân An UI Plugin đã có một lựa chọn forgot password mà bạn có thể sử dụng trực tiếp hoặc sử dụng như một tài liệu tham khảo.

+0

tuyệt vời, đơn giản và súc tích. Tôi tin rằng emailadress + timestamp (như muối) thế hệ băm sẽ làm công việc cho thế hệ liên kết? Ngoài ra chỉ để tham khảo nhanh để đáp ứng với liên kết động tôi sử dụng một cái gì đó như: \t @RequestMapping (giá trị = "/ var/{name}", phương pháp = RequestMethod.GET) – Aubergine

+0

Bạn có thể xác nhận rằng trước khi tôi chấp nhận? :-) – Aubergine

+0

Tại sao lại sử dụng hàm băm? Bạn vẫn cần lưu trữ mã thông báo để xác minh nó và dấu thời gian có thể đoán được. Nếu tôi biết ai đó đã yêu cầu thiết lập lại và biết email của họ, tôi chỉ có thể lặp qua tất cả các dấu thời gian có thể trên một cửa sổ phù hợp cho đến khi hệ thống cho phép. Sử dụng các byte ngẫu nhiên cho mã thông báo liên kết và làm cho nó đủ dài t phải lo lắng về nó (ví dụ 16 byte). –

5

Tôi đã triển khai dự án JAVA cho trường hợp sử dụng này. Đó là trên GitHub, mã nguồn mở.

Có lời giải thích cho tất cả mọi thứ (và nếu có điều gì là mất tích - cho tôi biết ...)


Có một cái nhìn: https://github.com/OhadR/Authentication-Flows

Đây là khách hàng ứng dụng web có sử dụng các auth-dòng chảy, với README với tất cả lời giải thích. nó hướng dẫn bạn triển khai: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows

+0

Điều này có đủ ổn định để thích ứng với việc sử dụng sản xuất không? – Kafkaesque

+0

nó là một câu hỏi hay. Tóm lại: CÓ. Lưu ý rằng để sản xuất, mỗi một (thường) có nhu cầu riêng của mình. ví dụ, có những công ty cần cơ chế "câu hỏi bí mật" mà tôi không thực hiện. nhưng nó là một cơ sở rất tốt để bắt đầu, và để thêm bất cứ điều gì cần thiết. có một cái nhìn trong README. cho tôi biết nếu có điều gì đó không rõ ràng. và có - nó là ổn định :-) LƯU Ý: Tôi đã thay đổi các liên kết trong câu trả lời của tôi. có một cái nhìn .. – OhadR

+0

Hi @OhadR: Tôi đang đề cập đến dự án của bạn, nó hữu ích cho tôi, tôi nhận được một ngoại lệ: AuthenticationFlowsProcessorImpl - Xác thực thất bại; ngoại lệ lồng nhau là javax.mail.AuthenticationFailedException, UserActionController - Tài khoản bị khóa hoặc không tồn tại, tôi đã kiểm tra và dữ liệu người dùng đã chèn vào db –

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