2010-07-08 34 views
12

Tôi có một trang web hiện có mà tôi muốn trở thành nhà cung cấp OpenID. Tất cả tài khoản người dùng của tôi được lưu trữ trong một bảng mysql.Tạo một Nhà cung cấp OpenID trong PHP

I figured kể từ một OpenID được biểu diễn dưới dạng URL, tôi sẽ làm điều gì đó như: http://login.mydomain.com/username

tôi đã thiết lập một tên miền phụ, và tạo ra một htaccess mà chuyển hướng tất cả các URL để /login.php?username = [tên người dùng]

Cách tôi xem và cho tôi biết nếu tôi sai, ai đó sẽ nói StackOverflow, họ nhập http://login.mydomain.com/myUsername. Họ truy cập vào một trang trên máy chủ của tôi yêu cầu mật khẩu của họ (vì tôi đã biết tên người dùng của họ), tôi kiểm tra xem nó có khớp không và trả lại chìa khóa?

Mọi người trực tuyến được đề xuất sử dụng Zend_OpenId_Provider. Tôi đã đọc tài liệu của họ (http://framework.zend.com/manual/en/zend.openid.provider.html), nhưng tôi thấy nó rất khó hiểu. Họ không có ví dụ thế giới thực nơi người dùng đăng nhập/mật khẩu được lưu trữ trong cơ sở dữ liệu.

Tôi cũng thấy php-open-id (http://github.com/openid/php-openid), nhưng cũng không có trợ giúp.

Có vẻ như đây là một việc khá phổ biến. Có hướng dẫn nào ở đó hay một ví dụ mà tôi có thể dễ dàng điều chỉnh?

+1

Tôi muốn nhận được một số ví dụ về điều này quá.Tôi đang hướng tới trở thành nhà cung cấp OpenID quá, chúng tôi có thể cộng tác. Tôi dự định sử dụng Janrain OpenID Enabled: http://www.janrain.com/openid-enabled, vì Zend đã thất bại một số yêu cầu của tôi. Và tôi e rằng bạn phải đọc nguồn ... – jayarjo

+0

Tôi đang mở để kích hoạt openid hoặc bất kỳ khác. Thật khó để tìm sự giúp đỡ để trở thành một nhà cung cấp. Tôi đã đặt một khoản tiền thưởng nhỏ cho câu hỏi. Có lẽ nó sẽ giúp ... Bình chọn cho câu hỏi này. –

+0

Chất lượng của Zends tài liệu chính thức là người nghèo. Họ hầu như không cung cấp các ví dụ thế giới thực. – jantimon

Trả lời

8

Khi bạn gắn thẻ câu hỏi này với khung công tác zend, tôi nghĩ bạn muốn thực hiện điều này với ZF.

Nhìn vào constructor của Zend_OpenId_Provider

public function __construct($loginUrl = null, 
          $trustUrl = null, 
          Zend_OpenId_Provider_User $user = null, 
          Zend_OpenId_Provider_Storage $storage = null, 
          $sessionTtl = 3600) 

Điều quan trọng là tham số $storage.

Trong ví dụ trên http://framework.zend.com/manual/en/zend.openid.provider.html, chúng không vượt qua bất kỳ thông số nào. Điều đó có nghĩa là theo mặc định, nhà cung cấp Zend_OpenId_Provider_Storage_File được sử dụng. Một lần nữa điều này sẽ lưu trữ theo mặc định trong các tệp trong thư mục TEMP của bạn (/tmp trên Linux).

Về cơ bản, ví dụ phải đầy đủ chức năng. Bạn có thể đăng ký một số người dùng hơn bằng cách gọi $server->register($someid, $somepassword);

Nhưng vì nó lưu trữ các tài khoản mỗi mặc định trong thư mục tạm thời, bạn nên thay thế dòng đó bằng một cái gì đó như thế này (nếu nó không quan trọng để lưu trữ các tài khoản trong các tập tin):

$dir = "/var/lib/myopenidusers"; 
mkdir($dir); 
$server = new Zend_OpenId_Provider(null, null, null, new Zend_OpenId_Provider_Storage($dir)); 

Bây giờ, nếu bạn thích lưu người dùng của bạn vào cơ sở dữ liệu, bạn phải triển khai Provider_Storage của riêng mình.

Hãy xem lớp trừu tượng abstract class Zend_OpenId_Provider_Storage. Đây là những phương pháp bạn phải thực hiện.

+0

Lưu ý rằng tôi đã có tất cả người dùng trong cơ sở dữ liệu của mình. Tôi vẫn cần phải "đăng ký" chúng? –

+0

Có vẻ như tôi phải viết tất cả. Tôi chỉ muốn phần "đăng nhập" của nó được thực hiện thông qua bảng mysql của tôi. Ở đây tôi cần phải thực hiện tất cả các mã từ đầu, hầu hết trong số đó tôi thậm chí không hiểu ... –

1

Bạn có thể thử phpMyId. Xem bản trình diễn từ http://phpmyid.com/. Mọi chi tiết về phpMyId có thể được tìm thấy tại http://siege.org/phpmyid.php.

+0

phpMyId là tuyệt vời nhưng người dùng duy nhất chỉ out-of-the-box, và tôi không chắc chắn nó không OpenID 2 (?). Bạn có thể làm tốt hơn bắt đầu bằng http://simpleid.sourceforge.net/ – Rup

1

Bạn có thể dùng thử JanRain Engage (http://www.janrain.com/products/engage). Nó là một giao diện đơn giản để tích hợp OpenID với các ứng dụng web. Phiên bản miễn phí phải đủ tốt cho mọi mục đích thực tế.

+1

Tham gia là CHẤP NHẬN OpenId, không phải là nhà cung cấp. Bạn có thể nghĩ đến FEDERATE, điều này không miễn phí. –

0

Chúng tôi sử dụng: http://source.keyboard-monkeys.org/projects/show/communityid

Từ trang web của họ:

"Cộng đồng-ID là một thực hiện OpenID trong PHP đó là OpenID 2.0 Cộng đồng-ID là xây dựng đến 100% trên phần mềm mã nguồn mở và là. phát hành theo giấy phép BSD Người dùng có thể theo dõi các trang web đáng tin cậy của họ và quản lý chúng. Đăng nhập vào C-ID có thể là tên người dùng/mật khẩu hoặc Mật khẩu một lần với Yubikey Người dùng có thể có nhiều hồ sơ như thông tin liên hệ cá nhân hoặc doanh nghiệp .

Để có thống kê quản trị viên cộng đồng ID có sẵn để theo dõi đăng ký người dùng mới, người dùng được ủy quyền mỗi ngày hoặc số lượng trang web đáng tin cậy. Quản trị viên có thể đặt trang web ở chế độ bảo trì hoặc gửi email cho tất cả người dùng đã đăng ký.

Đối với dữ liệu người dùng và xác thực, quản trị viên có thể chọn lưu trữ db mặc định hoặc để kết nối với máy chủ LDAP. Hỗ trợ được xác nhận hiện tại là OpenLDAP. máy chủ LDAP khác nên làm việc cũng tốt."

+0

Tôi đang cố gắng thiết lập, tôi điều hành một doanh nghiệp nhỏ với tôi và 3 người khác, chúng tôi điều hành 4 trang web và muốn SSO, tôi đã thiết lập phần SSO, nhưng không chắc chắn cách chuyển tiếp các trang web khác để đăng nhập Với cái này :/ – MRVDOG

0

SimpleID là một nhỏ và tốt đẹp để sử dụng + cài đặt phần mềm cung cấp OpenID. Tôi sử dụng nó bản thân mình và không thể phàn nàn.

2

tôi đã cố gắng tất cả mọi thứ được liệt kê ở đây, ID cộng đồng, simpleid, janrain, v.v., cùng với tất cả những người tự xưng là nhà cung cấp từ OpenID Wiki/Libraries và không thành công. Sau đó tôi tình cờ gặp Prairie và chạy nó sau khoảng một giờ. và tôi đã nhận được nó để làm việc chống lại bảng người dùng của tôi

Các vấn đề liên quan