Tôi muốn triển khai hệ thống đăng nhập OpenID với bản phát hành LightOpenID mới nhất. Tôi đang thử nghiệm ví dụ được cung cấp cùng với dòng mã nguồn theo dòng (tôi vừa thay thế localhost
bằng $_SERVER['HTTP_HOST']
trong hàm tạo).Mã đăng nhập OpenID không thành công trong máy chủ trực tiếp
Vấn đề là mọi thứ hoạt động tốt trong hộp phát triển của tôi bên trong mạng riêng (PHP/5.3.6 trên Windows Vista) nhưng xác thực luôn thất bại trong máy chủ cuộc sống của tôi tại mạng công cộng HSP (PHP/5.3.3 trên CentOS).
Tôi đã thêm tất cả var_dump()
xung quanh và tôi có thể cho bạn biết rằng cả hai bản sao của mã sản xuất chính xác cùng một tham số yêu cầu và nhận chính xác cùng một thông số phản hồi (qua GET). Chỉ openid.assoc_handle
, openid.sig
, openid.response_nonce
và openid.return_to
có các giá trị khác nhau, mà tôi đoán là hành vi mong đợi.
Tuy nhiên, hộp dev của tôi nhận được điều này từ các nhà cung cấp OpenID (không có vấn đề mà một trong tôi sử dụng):
is_valid:true
ns:http://specs.openid.net/auth/2.0
... và fox sống của tôi nhận được điều này:
is_valid:false
ns:http://specs.openid.net/auth/2.0
Có aren không có bất kỳ ký tự không phải ASCII nào liên quan nên nó không thể là vấn đề mã hóa. Phải có một cái gì đó sai trong dịch vụ lưu trữ của tôi, nhưng tôi chỉ không thể tìm ra những gì.
Tôi cần đề xuất về nguyên nhân có thể và mẹo khắc phục sự cố.
Cảm ơn bạn đã sửa chữa. Mặc dù bị trùng lặp, tôi tự hỏi tại sao cuộc gọi thứ hai tới file_get_contents ($ url, false, $ context) bằng $ data không hoạt động? – neobie
Tôi cho rằng bạn chỉ có thể xác thực thành công một cuộc gọi vì lý do bảo mật. –
Nó được gọi là 'nonce' vì một lý do. Đó là mã thông báo một lần. – Maerlyn