Tôi đang làm việc để tạo nhà cung cấp xác thực cho Symfony 2 cho phép người dùng xác thực bằng giao thức đăng nhập một lần có tên là CAS.Symfony2: Cách nhận các giá trị cấu hình Trình lắng nghe xác thực vào một dịch vụ khác?
My Trình nghe xác thực kéo dài từ AbstractAuthenticationListener. Một trong các tham số cấu hình là check_path
, là đường dẫn/tuyến đường kích hoạt trình lắng nghe xác thực để xác thực yêu cầu.
Tôi cần check_path
khi tôi xây dựng các URL đến máy chủ CAS (vì vậy CAS máy chủ biết nơi để trả lại người sử dụng), đó là dễ dàng, vì tùy chỉnh của tôi Entry Point lớp được thông qua các mảng cấu hình khi nó được xây dựng trong an ninh của tôi Nhà máy.
Phần khó là tôi cũng cần check_path
bên ngoài trình nghe, như trong khi xác thực trong lớp Nhà cung cấp xác thực của mình. Tôi cần nó vì khi máy chủ CAS gửi người dùng quay trở lại ứng dụng, nó sẽ chuyển một thông số "ticket" phải được xác thực. Để xác thực nó, tôi gửi một yêu cầu curl đến máy chủ CAS phải chứa vé cũng như check_path
gốc đã được sử dụng. Khi viết bài này, tôi nhận ra rằng tôi có thể nhận URL hiện tại của yêu cầu trang khi tôi ở bên trong Nhà cung cấp xác thực (vì nó là check_path
kích hoạt nó), nhưng điều đó có vẻ như vậy, và tôi muốn nhận giá trị cấu hình trực tiếp để xây dựng lại URL dịch vụ. Nó cũng không giúp tôi khi tôi muốn sử dụng check_path
ở nơi khác, như khi xây dựng URL đăng xuất tới máy chủ CAS cũng yêu cầu check_path
.
EDIT: Phương pháp createAuthProvider
của AbstractFactory
thông qua cả hai cấu hình và container, nhưng tôi không thể sửa đổi bất kỳ dịch vụ của tôi ở đây vì họ chưa một phần của container. Có lẽ nếu tôi có một cách để thêm một trình biên dịch vượt qua sau khi dịch vụ của tôi được nạp và bằng cách nào đó có quyền truy cập vào cấu hình người nghe?
'check_path' không phải là thông số bình thường nên không thể thực hiện việc này. Nó là một tùy chọn cấu hình cho người nghe xác thực (xem mã cho lớp 'AbstractAuthenticationListener'). – Brian