2010-08-24 37 views
5

nhà cung cấp OpenID Mỗi có một Url nhà cung cấp (ví dụ Google: https://www.google.com/accounts/o8/id)DotNetOpenAuth: Cách triển khai một nhà cung cấp OpenId đơn giản?

Sử dụng OpenIdRelyingParty.CreateRequest tôi thành công trong việc chuyển hướng người dùng đến nhà cung cấp Google Url và nhận các cuộc gọi lại nhà cung cấp. Mọi thứ đều ổn.

Bây giờ tôi đang cố gắng triển khai nhà cung cấp OpenId đơn giản của riêng mình (Tôi muốn hoạt động như Google trên ví dụ của mình). DotNetOpenAuth có một bản demo nhà cung cấp được gọi là OpenIdProviderWebForms. Trong 4 hoặc 5 giờ qua, tôi đã cố gắng kết nối với nó bằng cách sử dụng cùng một bản trình diễn mà tôi đã quản lý để kết nối trên Google. Đầu tiên: Tôi không nên gọi cho tôi URL nào. Tôi đã thử tất cả các Url (server.aspx, provider.ashx ...) và tất cả chúng đều kích hoạt một ngoại lệ "Không tìm thấy điểm cuối OpenID". Tất cả các cấu hình có vẻ là tốt.

Làm cách nào để triển khai nhà cung cấp OpenId đơn giản? Tôi nên gọi URL nào trong số OpenRelyingParty.CreateRequest?

Trả lời

16

Đầu tiên chúng ta hãy thiết lập một số thuật ngữ:

Các User-supplied identifier là chuỗi mà người dùng thực sự loại trong (hoặc được kích hoạt bằng cách nhấn vào một nút xác định trước tại RP) kích hoạt OpenID khám phá diễn ra. Nó không được chuẩn hóa và không bao giờ được sử dụng để đại diện cho người dùng trong cơ sở dữ liệu của bạn bởi vì nó không an toàn hoặc độc đáo, nhưng đó là điểm bắt đầu cần thiết. Khám phá trên số nhận dạng này yeilds là claimed identifier hoặc OP Identifier. Ví dụ: yahoo.com, myopenid.com, andrewarnott.myopenid.com

Claimed Identifier là Mã định danh OpenID mà người dùng "kiểm soát" hoặc sử dụng làm nhận dạng của mình. Có thể hoặc có thể không phải là là URL (có thể là XRI). Một xác nhận tích cực từ OP sẽ luôn là một số nhận dạng được xác nhận quyền sở hữu (ngay cả khi khám phá được bắt đầu bằng Mã định danh OP). Ví dụ: https://andrewarnott.myopenid.com/

OP Identifier hoặc "Số nhận dạng nhà cung cấp OpenID" là OpenID Identifer mà RP có thể thực hiện khám phá để bắt đầu luồng identifier select nơi RP chưa biết số nhận dạng được xác nhận của người dùng sẽ là gì. Ví dụ: https://me.yahoo.com/, http://www.myopenid.com/https://www.google.com/accounts/o8/id

Các OP Endpoint là URL thực tế rằng RP chuyển hướng người dùng đến để xác thực người dùng, và được sử dụng để thiết lập các hiệp hội chia sẻ hoặc thực hiện xác minh trực tiếp của một khẳng định có sử dụng một OP tin liên kết. Ví dụ: http://localhost/server.aspx, http://localhost/provider.ashx, https://www.google.com/accounts/o8/ud (chú ý ud kết thúc thay vì id)

Vì vậy, với tất cả các nền đó, OpenIdRelyingParty.CreateRequest cuộc gọi của bạn sẽ nhận được một định danh người dùng cung cấp, mà cũng có thể là một dạng tuyên bố hoặc một OP định danh. Cần không phải là điểm cuối OP. Vì vậy, ví dụ, bạn có thể vượt qua trong:

openIdRelyingParty.CreateRequest("http://localhost/sampleop/") 

hoặc

openIdRelyingParty.CreateRequest("http://localhost/user.aspx?username=bob") 
+2

Andrew, cảm ơn bạn rất nhiều vì tất cả những giải thích này +1. Nó thực sự đã giúp tôi làm sáng tỏ những khái niệm này. Tôi đã thành công trong việc tạo 2 trình diễn DotNetOpenAuth để kết nối với nhau (OP và RP) nhưng tôi không thể tạo OP của riêng mình và kết nối với nó.Tiếp tục nhận được "Không tìm thấy điểm cuối OpenId", đây không phải là lỗi rất giải thích. Dự án của bạn (DotNetOpenAuth) có vẻ là tuyệt vời nhưng nó thiếu tài liệu. Trong thực tế, tôi nghĩ rằng bản thân openid thiếu tài liệu. Tôi không thể tìm thấy những khái niệm này chỉ bất cứ nơi nào khác. Cảm ơn bạn anyway :) –

+0

@ André Pena, tôi đã cố gắng cho ngày để có được OP của tôi để làm việc. nhưng đó cũng là vấn đề bạn gặp phải. Bạn đã từng giải quyết vấn đề này chưa? –

2

Đối với các ví dụ DotNetOpenAuth MVC, url mở Id định danh để sử dụng là http://localhost:4864/User/Identity (nơi OpenIdProviderMvc được cấu hình để chạy trên cổng 4864 trên localhost)

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