SSO / tích hợp xác thực với 'dịch vụ thư mục' bên ngoài


15

Tôi sắp bắt đầu làm việc trên một nguyên mẫu cho một khách hàng - và một trong những tính năng cần có là tích hợp với hệ thống đăng ký / xác thực người dùng nội bộ.

Hệ thống này sẽ hoạt động như cơ sở dữ liệu người dùng có thẩm quyền và cung cấp giao diện RESTful để tạo người dùng mới và xác thực người dùng hợp lệ.

  1. Tôi cần có khả năng tạo người dùng mới trong WP và như một phần của quy trình đó thực hiện cuộc gọi đến API xác thực bên ngoài để tạo / xác thực người dùng đó.

  2. Một người là người dùng hợp lệ nhưng không biết đến WP nên có thể đăng nhập để bình luận mà không cần phải đăng ký trên trang WP.

  3. Một người đăng nhập vào trang web tổng thể cũng sẽ tự động đăng nhập vào WordPress.

Tôi đang nghĩ sau đây là con đường để đi.

  • Đối với (1) - tôi có thể sử dụng móc đăng ký không?

  • Đối với (2) - Tôi giả sử tôi móc bộ lọc xác thực - tức là khi ai đó cố gắng đăng nhập, tôi bẫy nó, thực hiện cuộc gọi đến hệ thống bên ngoài và sau đó xử lý đăng nhập WP hoặc chuyển hướng chúng đến quy trình đăng ký trong đó ( 1) mất oer.

  • Đối với (3) - đọc cookie đăng nhập được đặt bởi trang web chính và tiến hành (2)?

Tôi đoán tôi cũng sẽ cần phải chèn một bản ghi vào bảng người dùng và bảng usermeta.

Vì vậy, những điều trên có ý nghĩa - tôi đã không nghĩ về một cái gì đó. Bất cứ ai cũng có bất kỳ nguồn lực tốt nào để trợ giúp việc này (@hakre - Tôi thấy bạn đã hoàn thành một số công việc này !!).

Cập nhật

Vì vậy, tôi vẫn cố gắng chống lại điều này một chút, về cơ bản là tôi đang cố gắng nối vào bộ lọc xác thực và sử dụng nó để:

  1. kiểm tra xem cookie đăng nhập cho trang web 'chính' đã được đặt chưa và nếu có, hãy xác nhận lại với API xác thực của họ và nếu hợp lệ, hãy đăng nhập WP bằng wp_signon(), sử dụng thông tin có trong cookie của trang chính (email và mật khẩu băm) làm thông tin đăng nhập cho WP
  2. nếu cookie không được đặt, hãy chuyển hướng đến trang đăng nhập trang chính và nhận thông tin đăng nhập / đăng ký, sau đó quay lại bước 1
  3. nếu không có người dùng WP khi tồn tại người dùng trang chính được xác thực, hãy tạo nó và sau đó đăng nhập 'minh bạch' (nghĩa là người dùng không thấy biểu mẫu đăng nhập WP)

Về cơ bản, tôi muốn ẩn hoàn toàn mẫu đăng nhập WP cho những người dùng sẽ chủ yếu bình luận và sau đó tìm cách cho phép tác giả và quản trị viên truy cập trực tiếp.

Nó diễn ra khá chậm, đây là những gì tôi có thể sử dụng một số trợ giúp với:

  • bộ lọc xác thực có đúng không? Nó dường như không được gọi trong tất cả các tình huống tôi mong đợi - ví dụ: tiện ích meta hiển thị các liên kết đăng nhập / đăng xuất mà không cần khai thác hook xác thực

  • tôi có thể wp_signon()trả về một WP_Userđối tượng (biểu thị thành công), nhưng nó không ảnh hưởng đến trạng thái đã đăng nhập - tức là tiện ích meta vẫn sẽ hiển thị "Đăng nhập" ngay cả sau khi làm mới.

Mọi sự giúp đỡ đều biết ơn :)


Có lẽ đây là một câu hỏi riêng biệt?
anu

ồ, và tôi không biết liệu điều này thậm chí có được phép đề cập hay không, nhưng tôi vui vẻ trả tiền trong nửa ngày hoặc lâu hơn để được giúp đỡ về điều này - chi tiết liên hệ trên hồ sơ của tôi.
anu

Câu trả lời:


12

OK, cách tiếp cận hiệu quả với tôi như sau:

  1. Giả sử rằng cơ sở dữ liệu người dùng trang web chính là có thẩm quyền. Cookie đăng nhập trang chính chứa ID và hàm băm của mật khẩu trang.

  2. Nhận cookie từ trang web chính và xác nhận lại nó dựa trên API xác thực của trang web chính

  3. Nếu hợp lệ, sử dụng địa chỉ email từ giá trị trả về làm 'user_login'giá trị cho WP và mật khẩu trang web được băm làm mật khẩu WP.

  4. Kiểm tra nếu người dùng này tồn tại trong WP bằng cách sử dụng wp_authenticate('user_login', 'user_pass'). Điều này trả về một WP_Userđối tượng thành công, hoặc một WP_Errorđối tượng thất bại.

  5. Nếu WP_Error/is_wp_error(), sau đó sử dụng wp_update_user()để tạo người dùng (hoặc cập nhật người dùng bằng mật khẩu đã thay đổi).

  6. Đăng nhập qua wp_set_current_user(), wp_set_auth_cookie()do_action('wp_login, id)

(Tất cả được chứa trong một chức năng gắn liền với 'init'hành động)

Điều này dường như đang hoạt động - người dùng trang web hợp lệ không biết đến WP được tạo tự động. Thay đổi mật khẩu được phục vụ và nếu cookie trang web được đặt và người dùng WP tồn tại, SSO tự động và khá liền mạch.


1
+1 Mô tả / câu trả lời tuyệt vời. Hy vọng bạn tìm thấy thời gian một ngày để hiển thị thêm một chút chi tiết một ngày. Sẽ giúp chúng tôi những người khác tránh hầu hết các thử nghiệm / erro;)
kaiser

1
Đây chính xác là những gì tôi đang tìm kiếm, bạn có thể giải thích thêm một chút về việc xử lý không? Các bước đặc biệt 1,2,3 không rõ ràng đối với tôi. Cảm ơn!!
chifliiiii

3

Toàn bộ hệ thống xác thực là cắm. Tôi đề nghị xem xét các plugin hiện có để có ý tưởng về cách ghi đè hệ thống. Có lẽ bằng cách xem xét một số plugin LDAP ?


Có và không có nghĩa là ngớ ngẩn, đó là hiển nhiên !!
anu

Đối với một số thông tin có thể giúp với phản ánh của người sử dụng đã đăng nhập vào trạng thái, xem câu trả lời của tôi cho câu hỏi này khác: wordpress.stackexchange.com/questions/8998/...
Dougal Campbell

1

Một số chức năng sử dụng liên quan được định nghĩa có điều kiện trên !function_exists()trong wp-includes/pluggable.phpvà rất dễ để ghi đè với các phiên bản của riêng bạn.


1

Việc kích hoạt Đăng nhập một lần trong WordPress khiến tôi mất hơn 18 giờ đấu tranh nhưng có thể bạn chỉ mất vài phút:

Về cơ bản, bạn sẽ muốn sử dụng https://wordpress.org/plugins/wp-force-login/ và phiên bản sửa đổi của https://as.wordpress.org/plugins/jwt-authenticator/ và sau đó tạo auth điểm cuối được bảo vệ trên trang web chính của bạn tạo JWT (Mã thông báo Web JSON) và chuyển hướng quay lại URL đặc biệt của trang web WordPress của bạn.

Xem mã đầy đủ ở đây .


Cảm ơn câu trả lời của bạn. Liên kết chỉ có câu trả lời không được khuyến khích vì liên kết có thể biến mất và sẽ khiến bạn trả lời vô ích. Tốt hơn là bao gồm các bit có liên quan ở đây.
kaiser
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.