Cách thích hợp để xác thực người dùng là gì?


7

Vài năm trước, tôi đã viết một thành phần nhỏ và rất chưa hoàn chỉnh, xác thực người dùng đến từ bên ngoài Joomla! tức là một ứng dụng di động.

Có một cách thích hợp hoặc ưa thích để bàn giao này?


Có bất kỳ cân nhắc an ninh? Ứng dụng khác sẽ lưu tên người dùng và mật khẩu của họ để xác thực hay bạn muốn sử dụng một hệ thống sẽ không phải lưu trữ các tên người dùng / mật khẩu trong ứng dụng khác?
David Fritsch

Tôi nghĩ rằng tôi sẽ thích một hệ thống không lưu trữ thông tin xác thực phía khách hàng. Đăng nhập ứng dụng sẽ kích hoạt yêu cầu xác thực và nếu thành công sẽ nhận được mã thông báo.
Nestor Ledon

Câu trả lời:


5

Dựa trên nhận xét của bạn, bạn đang tìm kiếm một thiết lập OAuth. Theo tôi biết, Joomla có các lớp Oauth được tích hợp vào lõi, nhưng các lớp này là cho phép Joomla hoạt động như máy khách (ứng dụng di động của bạn là máy khách trong trường hợp của bạn). Họ không cung cấp cho bạn tùy chọn để chạy như một máy chủ.

Gần đây tôi mới sử dụng gói này để thiết lập Máy chủ OAuth2 trên Khung công tác Joomla: https://github.com/bshaffer/oauth2-server-php . Nó làm việc rất tốt. Điều này chắc chắn sẽ mất vài ngày để thiết lập và chạy tất cả, nhưng bạn chắc chắn có thể thiết lập điều này trong Joomla.

Có một vài phương pháp khác nhau để xác thực người dùng trong OAuth2. Cách tiếp cận phổ biến là để khách hàng chuyển hướng người dùng đến trang web của bạn để nhập thông tin đăng nhập của họ. Sau đó, bạn chuyển hướng người dùng trở lại máy khách với mã mà máy khách chuyển thành mã thông báo truy cập.

Vì có vẻ như bạn cũng điều khiển ứng dụng di động, điều này là không cần thiết. Bạn tin tưởng khách hàng (tôi hy vọng), vì vậy bạn chỉ cần người dùng đăng nhập vào ứng dụng.

Sau đó, bạn sẽ sử dụng tùy chọn "Chủ sở hữu tài nguyên / Thông tin mật khẩu" được nêu ở đây: http://bshaffer.github.io/oauth2-server-php-docs/overview/grant-types/ . Ứng dụng di động này chỉ cần gửi người dùng / mật khẩu được nhập vào trang web Joomla của bạn và sau đó trang Joomla gửi lại mã thông báo để xác thực. Mã thông báo có thể được lưu và sử dụng vào lần tiếp theo thay vì đăng nhập lại.

Điều này cho phép bạn kiểm soát trên trang web Joomla để vô hiệu hóa các mã thông báo để buộc người dùng di động phải đăng nhập lại.


4

Bạn có thể sử dụng mã sau đây:

JFactory::getApplication()->login($credentials);

Ở đâu:

$credentials = Array('username' => string, 'password' => string);

Tôi tìm thấy những điều sau đây trong Joomla! tài liệu, có sự khác biệt đáng kể trong phương pháp này? docs.j Joomla.org/ Lần
Nestor Ledon

1
Phương pháp logintrên sử dụng phương thức xác thực JAuthentication :: kích hoạt sự kiện onAuthenticate. Vì vậy, tài liệu này cho chúng tôi biết về một phần trong chu kỳ đăng nhập j Joomla. Mục đích của nó là cung cấp một cách để tương tác với chu kỳ đăng nhập j Joomla và thực hiện đăng nhập tùy chỉnh. Trong chu trình này, chúng tôi có các sự kiện onUserAuthorisationFailure, onUserLogin và onUserAfterLogin cũng vậy
csbenjamin

3

Bạn muốn sử dụng một cái gì đó như OAuth / OAuth2. Ý tưởng của tôi ở đây không phải là OAuth đúng mà dựa trên kiến ​​thức của tôi về Joomla một cách dễ dàng nhất.

Xác thực người dùng thông qua lệnh gọi API đến thành phần trong Joomla để tạo mã thông báo được gắn vào IP của họ, sau đó chuyển hướng họ bằng yêu cầu GET xác thực mã thông báo đó và tạo phiên cho họ. Mã thông báo rất dễ bảo mật vì nó dựa vào IP để xác thực người dùng đã được xác thực, cách tốt nhất là đảm bảo rằng nó chỉ có thể được sử dụng một lần. Đối với lệnh gọi API, nó phải là một yêu cầu POST được mã hóa SSL để có kết quả tốt nhất.

Vì vậy, hãy gửi một yêu cầu POST cho bạn thành phần có chứa IP, tên người dùng và mật khẩu của người dùng. Nếu tất cả đều hợp lệ thì bạn gửi lại mã thông báo. Sau đó, bạn chuyển hướng người dùng đến thành phần của bạn có chứa mã thông báo đó để đặt phiên. Tôi không biết làm thế nào API Joomla có thể được sử dụng để đăng nhập một người, nhưng tôi chắc chắn có một cái gì đó cho nó.

Chỉnh sửa: Có vẻ như câu trả lời của csbenjamin đã đi vào API để đăng nhập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.