it-swarm-vi.com

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

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?

7
Nestor Ledon

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 như tôi biết, Joomla có Oauth các lớp được xây dựng trong 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ỉ 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.

5
David Fritsch

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

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

ở đâu:

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

Bạn muốn sử dụng một cái gì đó như OAuth/OAuth2. Ý tưởng của tôi ở đây không đúng OAuth nhưng 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 mã hóa SSL POST yêu cầu để có kết quả tốt nhất.

Vì vậy, hãy gửi 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 đó thiết lập phiên. Tôi không biết API Joomla có thể được sử dụng như thế nào để đă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.

3
Jordan Ramstad