2011-01-16 43 views
5

Tôi muốn cho phép người dùng đăng nhập vào trang web của mình bằng hệ thống đăng nhập của tôi hoặc FB Connect hoặc Đăng nhập Google. Tôi sẽ không muốn sử dụng các thư viện lớn (như dotnetOpenAuth) chỉ cho 2 tùy chọn đó - Vậy làm thế nào tôi nên thực hiện điều này?Đăng nhập bằng FB Connect/Google OAuth trong .NET

Câu hỏi bổ sung - làm cách nào để liên kết người dùng FB/Google với hệ thống người dùng bên trong của tôi? Tôi muốn cho phép đăng nhập bằng cách sử dụng cả hai (tôi có thể cho ví dụ đăng nhập bằng cách sử dụng FB và sau đó đăng nhập với Google, và vẫn bị ràng buộc với cùng một người dùng).

Tôi đang sử dụng ASP.NET MVC 2

Cảm ơn!

Trả lời

15

Nếu bạn không thích sử dụng các thư viện lớn như DotnetOpenAuth, bạn sẽ phải triển khai thủ công giao thức OpenID. Here are the specifications bạn sẽ cần phải tuân theo.

Điều này đang được nói, tôi khuyên bạn nên sử dụng thư viện hiện có. DotnetOpenAuth là thư viện tham chiếu cho .NET.

Ngoài ra một nhận xét nhỏ: OpenId và OAuth là các tiêu chuẩn khác nhau và được thiết kế để đạt được những thứ khác nhau: OpenId là để xác thực trong khi OAuth là để ủy quyền.

Theo như việc xác định cùng một người dùng có thể đăng nhập từ các nhà cung cấp OpenID khác nhau, bạn sẽ cần một cái gì đó để nhận dạng chúng. Ví dụ với DotnetOpenAuth khi tạo một yêu cầu xác thực để các nhà cung cấp OpenID, bạn có thể yêu cầu FullName và Email:

using (var openid = new OpenIdRelyingParty()) 
{ 
    var request = openid.CreateRequest(Identifier.Parse(openid_identifier)); 

    request.AddExtension(new ClaimsRequest 
    { 
     BirthDate = DemandLevel.NoRequest, 
     Email = DemandLevel.Require, 
     FullName = DemandLevel.Require 
    }); 
} 

và sử dụng thông tin này để xác định người dùng trong cơ sở dữ liệu nội bộ của bạn.

Vì vậy, đây là ý tưởng:

  1. Bạn tạo một bảng cơ sở dữ liệu nội bộ mà sẽ chứa người dùng trang web của bạn. Khi bắt đầu, bảng này trống.
  2. Một người dùng truy cập vào trang web của bạn và muốn sử dụng nó. Anh ta chưa được chứng thực nên bạn hỏi anh ta về thông tin của anh ta. Bạn cung cấp cho anh ta khả năng chọn nhà cung cấp OpenId của mình và chuẩn bị một yêu cầu xác thực và chuyển hướng anh ta đến nhà cung cấp của mình để xác thực.
  3. Người dùng xác thực với nhà cung cấp của anh ấy và được chuyển hướng trở lại trang web của bạn. Tại thời điểm này, bạn biết danh tính được xác nhận quyền sở hữu của mình và bạn thêm người dùng vào bảng người dùng của mình. Giờ đây, người dùng luôn có thể quay lại trang web của bạn và đăng nhập.
  4. Bạn có thể cung cấp khả năng cho người dùng được xác thực của bạn thêm một nhà cung cấp OpenId khác (giống như StackOverflow). Ý tưởng quan trọng là người dùng cần phải được xác thực cho trang web của bạn để thực hiện việc này. Vì vậy, ông có thể nhập nhà cung cấp OpenId thay thế của mình và được chuyển hướng đến nhà cung cấp này để xác thực. Một khi ông xác thực ông được chuyển hướng trở lại trang web của bạn và bởi vì ông đã được xác thực cho trang web của bạn, bạn có thể thêm vào bảng người dùng nhà cung cấp OpenId thay thế của mình.
  5. Hành động điều khiển sẽ xử lý chuyển hướng từ nhà cung cấp OpenId nên kiểm tra xem người dùng đã được xác thực cho trang web của bạn chưa và xác thực anh ấy bằng cách sử dụng FormsAuthentication.GetAuthCookie và chuyển danh tính được xác nhận quyền sở hữu. Nếu danh tính được xác nhận quyền sở hữu không tồn tại trong bảng người dùng nội bộ của bạn, bạn cần phải thêm nó. Nếu người dùng đã được xác thực cho trang web của bạn, điều đó có nghĩa là anh ta đang thêm nhà cung cấp OpenId thay thế vào tiểu sử của mình, vì vậy bạn sẽ cập nhật bảng người dùng của mình và thêm nhà cung cấp mới vào đó.
+0

có thể bạn biết một số triển khai nhỏ cho hệ thống Đăng nhập của Google? – Roman

+0

@roman, cá nhân tôi sử dụng DotnetOpenAuth. –

+0

Cảm ơn bạn. Tôi chỉ sợ nó quá phức tạp và đáng tin cậy 100%. Là nó? :) – Roman

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