2017-05-16 19 views
6

Chúng tôi có ứng dụng Wildfly 10 JEE và trình khách java chất béo sử dụng các cuộc gọi EJ từ xa để liên lạc với máy chủ. Việc xác thực được thực hiện bằng mô-đun đăng nhập tùy chỉnh trong máy chủ wildfly.Chuyển thông tin 'hết hạn mật khẩu' từ mô đun xác thực Wildfly Server đến máy khách EJB từ xa

Bây giờ, chúng tôi có yêu cầu tăng cường mô-đun đăng nhập này với khái niệm hết hạn mật khẩu. Bất cứ khi nào mật khẩu hết hạn, người dùng phải thay đổi mật khẩu của mình trong quá trình đăng nhập. Mô-đun đăng nhập sử dụng các cuộc gọi lại JAAS và trình xử lý gọi lại JAAS. Theo như tôi đã hiểu, chúng tôi có thể sử dụng javax.security.auth.callback.TextInputCallback trong LoginModule của chúng tôi để yêu cầu mật khẩu mới từ người dùng trong khi thực hiện đăng nhập.

Cách tích hợp này với tính năng truy cập từ xa. Khách hàng chất béo của chúng tôi nhận được TextInputCallback như thế nào để cung cấp đầu vào được yêu cầu? Tôi đoán chúng ta phải đăng ký một CallbackHandler tùy chỉnh ở phía máy khách để xử lý các cuộc gọi lại nhưng tôi không tìm thấy bất kỳ tài liệu nào về cách thực hiện điều này với Wildfly. Ai có thể cho tôi một gợi ý về tài liệu như vậy hoặc một mẫu về cách giải quyết vấn đề này?

Trả lời

4

Theo tôi, bạn đang đi sai hướng. Sử dụng phương pháp thay đổi mật khẩu của bạn vào LoginModule có một số vấn đề.

  • Đăng nhập người dùng thường được cho là quá trình "an toàn" tức là xử lý các tác dụng phụ "không có".
  • Sử dụng TextInputCallback để yêu cầu hộ chiếu mới ít nhất là lạ. TextInputCallback có nghĩa là yêu cầu người dùng nhập văn bản thông thường chứ không phải mật khẩu, ví dụ như yếu tố xác thực thứ hai như mã PIN (01)Ứng dụng khách thực hiện CallbackHandler không biết rằng đó là mật khẩu có thể phải được đeo mặt nạ khi được hiển thị trên scren.
  • Cách tiếp cận vi phạm nguyên tắc chịu trách nhiệm duy nhất của LoginModule - một LoginModule chịu trách nhiệm đăng nhập/xác thực người dùng.

Hãy nhớ rằng thường thay đổi mật khẩu bạn cần người dùng được xác thực/ủy quyền phải xác nhận thay đổi mật khẩu bằng cách nhập lại mật khẩu cũ của mình và thường cung cấp trường thứ hai nơi người dùng có thể quay lại -nhập mật khẩu mới của mình. Chỉ một xxxCallback có vẻ không đủ.

Ngay cả một không nên sử dụng Exceptions cho luồng kiểm soát tôi khuyên bạn nên sử dụng CredentialExpiredException để báo hiệu cho khách hàng rằng người dùng phải thay đổi mật khẩu. Đây cũng là cách Oracle hiện nó trong một trong những WebLogic JAAS Examples

Sau khi tất cả những nhận xét của tôi nếu bạn vẫn muốn/cần phải đặt nó vào phong tục LoginModule sau đó tôi muốn đề nghị phải xác định riêng Callback s của bạn ví dụ PasswordChangeCallback hoặc ConfirmPasswordCallback, NewPasswordCallback, VerifyNewPasswordCallback

Bạn chỉ có thể thêm chúng vào tùy chỉnh LoginModule không có cần phải đăng ký họ. Hãy nhớ rằng các máy khách chuẩn có thể có vấn đề với các cuộc gọi lại bổ sung này. Khách hàng của bạn sau đó phải triển khai CallbackHandler tương ứng.

Trong JAAS có hai cách để tùy chỉnh sử dụng CallbackHander * bằng cách cấu hình mặc định tùy chỉnh CallbackHandler

Từ CallbackHandler API documentaion

Một thi lớp CallbackHandler mặc định có thể được quy định trong auth.login .defaultCallbackHandler tài sản bảo mật. Thuộc tính bảo mật có thể được đặt trong tệp thuộc tính bảo mật Java nằm trong tệp có tên /lib/security/java.security. đề cập đến giá trị của thuộc tính hệ thống java.home và chỉ định thư mục nơi JRE được cài đặt.

hoặc bằng cách chuyển làm đối số cho hàm tạo của LoginContext. Các LoginContext cung cấp hai cấu trúc mà chấp nhận một CallbackHandler

public LoginContext(String name, CallbackHandler callbackHandler) 
     throws LoginException 


public LoginContext(String name, Subject subject, 
     CallbackHandler callbackHandler) throws LoginException 

thấy LoginContext API Documentation

Làm thế nào để nó tích hợp với loại bỏ?

Nó cũng giống như cách bạn đã làm. Không có nhiều khác biệt.

Khách hàng chất béo của chúng tôi nhận được TextInputCallback như thế nào?

Via CallbackHandler Giao diện tương tự như PasswordCallback. Bạn đã đề cập rằng Mô-đun đăng nhập sử dụng CallbackHandler.

void handle(Callback[] callbacks) 

Nếu bạn muốn biết làm thế nào để thực hiện các phương pháp handleCallbackHandler API Documentation cũng cung cấp một ví dụ về việc thực hiện các phương pháp CallbackHandlerhandle.

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