2010-06-10 32 views
13

Tôi đang phát triển một người tiêu dùng OpenID bằng PHP và đang sử dụng thư viện LightOpenID tuyệt vời (http://gitorious.org/lightopenid). Dựa vào mã của tôi trong số đó được tìm thấy trong kịch bản ứng dụng khách mẫu, tôi đã tạo thành công một người tiêu dùng. Tuy nhiên, tôi đã gặp phải vấn đề: Google yêu cầu openid.identityopenid.claimed_id để được đặt thành "http://specs.openid.net/auth/2.0/identifier_select" (xem here). Nếu tôi làm điều đó thì nó hoạt động nhưng các nhà cung cấp khác (tức là AOL) thì không.Google có phải là nhà cung cấp OpenID duy nhất yêu cầu "identifier_select" không?

Dưới đây là những câu hỏi của tôi:

  1. là Google một trường hợp góc - là nó trở thành nhà cung cấp OpenID duy nhất mà identifier_select là cần thiết, trái với thông số kỹ thuật OpenID?
  2. Có thiếu sót trong thư viện LightOpenID không?
  3. Sự hiểu biết của tôi về cách OpenID hoạt động không chính xác?
  4. Nếu Google không phải là nhà cung cấp duy nhất yêu cầu identifier_select thì có một số hữu hạn trong số chúng mà tôi sẽ chỉ mã hóa hoặc có cách nào đó để xác định điều này thông qua đặc tả OpenID không?

Tôi mới tham gia nội bộ của OpenID nên tôi sẽ không ngạc nhiên nếu đây là câu hỏi ngớ ngẩn. Tôi đã không thể tìm thấy bất kỳ thông tin về chủ đề này sau khi cọ rửa Internet.

+1

Chắc chắn không phải là một câu hỏi ngớ ngẩn (nếu chúng tồn tại), bạn thậm chí còn cung cấp thông tin phong phú, liên kết có liên quan, câu hỏi được xây dựng tốt và ghi chú rằng bạn thực sự tìm kiếm điều này! –

Trả lời

6

Google không mâu thuẫn với thông số kỹ thuật. Đặc tả OpenID 2.0 hoàn toàn cho phép các luồng identifier_select, cho phép một cái gì đó gọi là "định danh trực tiếp", mà Google là OP đáng chú ý duy nhất (mà tôi biết) thực sự thực hiện khả năng thực hiện. Và có, một thư viện OpenID RP được triển khai đầy đủ và chính xác sẽ tự động thông báo rằng Google (và bất kỳ OP nào khác thích nó) yêu cầu identifier_select vì nó là một phần của bước khám phá định danh nhận ra điều này. Xin lỗi về thư viện bạn đang sử dụng, nhưng có vẻ như nó khiến bạn đau buồn vì có lẽ việc triển khai OpenID không hoàn chỉnh.

Và nhân tiện, AOL hiện hỗ trợ identifier_select.

+1

Có vẻ như tôi sẽ chỉ phải mở rộng thư viện (LightOpenID). Hai thư viện PHP OpenID phổ biến (thành phần Zend và PHP-OpenID của JanRain) cung cấp tính linh hoạt cao hơn tôi cần và không có giao diện đẹp như LightOpenID. Chúc tôi may mắn! – Skrat

+0

Tôi nghĩ rằng phần lớn hỗ trợ định danh, bao gồm myopenid và yahoo. – Artefacto

+0

Artefacto, tôi nghĩ rằng bạn đang nhầm lẫn với định danh đạo diễn với identifier_select, đó là những thứ khác nhau. Identifier_select là trải nghiệm OpenID được khởi tạo bởi Identifier trong đó người dùng không phải biết số nhận dạng riêng của mình. "Danh tính được chỉ định" là nơi OP cung cấp số nhận dạng duy nhất theo cặp cho mỗi RP người dùng đăng nhập. Yahoo ví dụ hỗ trợ identifier_select, nhưng * không * định danh được chỉ dẫn. –

0

Điều này được sử dụng để xác thực trong chế độ Chọn ID điều khiển OP. Nó ít phổ biến hơn nhưng không phải là một trường hợp góc. Trong số tất cả các nhà cung cấp OP tôi sử dụng, tôi nhận thấy Google và Yahoo yêu cầu điều này.

Điều này là bắt buộc để hỗ trợ Danh tính được nhận dạng trong OpenID 2.0. Về cơ bản, bạn nhận được một OpenID khác cho trang web khác nhau. Có một sự thúc đẩy để chuyển sang mô hình này bởi những người ủng hộ quyền riêng tư vì vậy tôi nghĩ rằng bạn phải hỗ trợ điều này sớm hay muộn.

+0

Có cách nào để phát hiện nhà cung cấp yêu cầu Danh tính được Định hướng trước khi chuyển hướng người dùng không? Tôi có thể mã hóa hỗ trợ cho Yahoo và Google nhưng tôi vẫn hy vọng tìm kiếm giải pháp linh hoạt hơn. Có lẽ một cái gì đó trong thông số kỹ thuật OpenID mà tôi đang thiếu, một cái gì đó hiển nhiên. – Skrat

+0

Không giống như OpenID 1.0, bạn phải thực hiện một số công việc cấp phép cho nhà cung cấp OpenID 2.0. Ví dụ, bạn cần phải trau chuốt trang web của bạn với các logo NASCAR vì bạn không thể mong đợi người dùng biết URL OpenID 2.0 đó là gì. Bạn chỉ có thể thêm cờ vào cấu hình trang web của bạn cho việc này. –

7

Tác giả LightOpenID tại đây.

  1. Các spec cho phép nó, vì vậy nó có lẽ không phải là người duy nhất (câu trả lời khác đề cập đến Yahoo)
  2. Không, không có – là LightOpenID hỗ trợ này. (xem example-google.php trong thư viện).
  3. Bạn vẫn cần biết url khám phá, vì vậy bạn cần biết nhà cung cấp. Hoặc yêu cầu người dùng nhập https://www.google.com/accounts/o8/id làm danh tính của họ.

Lưu ý rằng câu trả lời này là về phiên bản mới nhất của thư viện của tôi, đã được đẩy sau khi câu hỏi này được hỏi.Đối với bất kỳ ai vẫn gặp khó khăn với vấn đề này, vui lòng tải xuống newest version

+0

Mewp, cảm ơn bạn đã cập nhật thư viện mà bạn đã đẩy chỉ một vài ngày trước. Bây giờ việc sử dụng "identifier_select" là tự động (tức là được xây dựng trong quá trình khám phá) có nghĩa là sử dụng LightOpenID sẽ hoạt động theo cùng một cách cho tất cả các nhà cung cấp. Cảm ơn bạn lần nữa, hãy tiếp tục công việc tuyệt vời. Tôi yêu thư viện của bạn, như vậy mã sạch (đọc 'có thể đọc được') là hiếm. – Skrat

+0

Tôi vừa rơi vào sự quyến rũ của OpenID, tôi chỉ muốn nói rằng tôi hoàn toàn yêu thích lớp học của bạn. Tôi vẫn còn khá xanh với khái niệm OpenID tôi đã dành cả đêm để đọc về nó nhưng tôi vẫn không thể hiểu được AX và SREG - nhưng ngày mai là một ngày khác! Ngoài ra, bạn sẽ nhớ nếu tôi đã cố gắng để ngã ba mã của bạn và phát hành nó như là một phần của dự án PMNM của tôi (http://sf.net/projects/phunction/), cũng được cấp phép MIT? –

+0

@Alix Axel: Vì dự án của bạn là MIT được cấp phép, bạn chắc chắn biết rằng giấy phép cho phép nó. Nói cách khác: tất nhiên bạn có thể, miễn là bạn không yêu cầu bạn đã viết nó. Ngoài ra, bạn không cần phải hiểu sâu về cách hoạt động của SREG/AX. Nó chỉ là một phương pháp tìm nạp thông tin bổ sung về một người dùng, và bạn có thể đánh dấu nó là otional hoặc required. Điều duy nhất bạn cần biết là tên trường AX, có thể tìm thấy tại http://www.axschema.org/types/. Nếu bạn có thêm bất kỳ câu hỏi nào, chỉ cần nhắn tin cho tôi. – Mewp

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