2010-04-08 38 views
9

Tôi đã đọc những câu hỏi khác và họ chủ yếu nói về sự an toàn của làm như vậy. Đó không hoàn toàn là mối quan tâm của tôi, chủ yếu là vì trang web là câu hỏi là một trò chơi dựa trên trình duyệt. Tuy nhiên, vấn đề lớn hơn là người dùng - không phải mọi người dùng đều biết đọc đủ để hiểu OpenID. Chắc chắn RPX làm cho điều này khá dễ dàng, đó là những gì tôi sẽ sử dụng, nhưng nếu người dùng không có tài khoản tại Google hay Facebook hoặc bất cứ điều gì, hoặc không tin tưởng hệ thống để đăng nhập bằng tài khoản hiện có? Họ sẽ phải nhận được một tài khoản tại một cung cấp khác - Tôi chắc chắn hầu hết sẽ biết cách để làm điều đó, hãy để một mình được làm phiền để làm điều đó.Sử dụng OpenID là chỉ phương thức xác thực

Ngoài ra còn có vấn đề làm thế nào để quản lý nó trong ứng dụng. Người dùng có thể muốn sử dụng nhiều danh tính với một tài khoản, do đó, nó không đơn giản như tên người dùng + mật khẩu để giải quyết. Làm cách nào để lưu trữ danh tính OpenID của người dùng trong cơ sở dữ liệu? Sử dụng OpenID cũng mang lại cho tôi một lợi ích: RPX có thể cung cấp thông tin hồ sơ mở rộng, vì vậy tôi chỉ có thể điền vào mẫu hồ sơ và yêu cầu người dùng chỉnh sửa theo yêu cầu.

Tôi hiện có này:

Users: 
------ 

ID  Email    Etc. 
--  --------------- ---- 
0  [email protected]oo.com  ... 
1  [email protected] ... 

UserOpenIDs: 
------------ 

ID  UserID  OpenID 
--  ------  ------ 
0  0   0 
1  0   2 
2  1   1 

OpenIDs: 
-------- 

ID  Provider Identifier 
--  -------- ---------------- 
0  Yahoo  https:\\me.yahoo.com\bob#d36bd 
1  Yahoo  https:\\me.yahoo.com\alice#c19fd 
2  Yahoo  https:\\me.yahoo.com\bigbobby#x75af 

Với những phím nước ngoài:

UserOpenIDs.UserID -> Users.ID 
UserOpenIDs.OpenID -> OpenIDs.ID 

Đó có phải là cách đúng đắn để lưu trữ định danh OpenID trong cơ sở dữ liệu? Làm thế nào tôi sẽ phù hợp với định danh RPX đã cho tôi với một trong cơ sở dữ liệu để đăng nhập vào người dùng (nếu nhận dạng được biết đến).

Vì vậy, đây là những câu hỏi cụ thể:

  • Làm thế nào tôi có thể làm cho nó dễ tiếp cận đối với người dùng không có một OpenID hoặc không muốn sử dụng một? (các lo ngại về bảo mật khi nói, đăng nhập bằng tài khoản Google của họ)
  • Làm cách nào để lưu trữ số nhận dạng trong cơ sở dữ liệu? (Tôi không chắc chắn nếu các bảng ở trên là đúng)
  • Tôi cần những gì để có các biện pháp để tránh người khác đăng nhập như một người dùng khác và vui vẻ làm bất cứ điều gì với tài khoản của họ? (Như tôi hiểu RPX gửi nhận dạng thông qua HTTP, vì vậy những gì ai sẽ phải làm là chỉ cần bằng cách nào đó lấy nó sau đó nhập nó trong lĩnh vực "OpenID")
  • gì khác tôi cần phải nhận thức được khi sử dụng OpenID?
+0

Xin chào, bản thân tôi mới sử dụng OpenId, nhưng hãy xem xét nó trong trang web của riêng tôi. cho câu hỏi thứ ba của bạn "các biện pháp ... để ngăn người khác đăng nhập với tư cách người dùng khác ...", vì tôi hiểu OpenId, bạn ** không bao giờ ** chấp nhận Url OpenId từ một nguồn không đáng tin cậy. khi triển khai, trang web của bạn lưu trữ thông tin đăng nhập của nhà cung cấp, trang web của nhà cung cấp liên lạc với bạn ** trực tiếp **, vì vậy, bạn luôn chấp nhận Url OpenId từ một trang web đáng tin cậy. –

Trả lời

4

Làm cho nó dễ tiếp cận

người dùng đầu tiên liên quan mà không có một OpenID, bạn có thể làm một trang nhỏ này giải thích làm thế nào để tạo một tài khoản (hoặc thậm chí chỉ với một số nhà cung cấp). Bằng cách này, việc tạo một tài khoản OpenID không khó hơn một tài khoản thông thường.

Đối với những người không muốn sử dụng OpenID, bạn có hai lựa chọn. Đầu tiên: triển khai thông tin đăng nhập kiểu cũ bên cạnh đăng nhập OpenID của bạn và cho phép người dùng chọn phương thức họ muốn. Thứ hai là chỉ có OpenID ... điều này đơn giản hóa công việc của bạn. Nói rằng một số người dùng tin tưởng hơn một trang web hơn là một nhà cung cấp OpenID tin cậy để đăng nhập, là theo ý kiến ​​của tôi khá lạ như các nhà cung cấp OpenID sử dụng kết nối thường được mã hóa, vv ...

lưu trữ trong cơ sở dữ liệu

Lược đồ được đề xuất bởi johnny g là những gì bạn cần. (tôi chỉ không biết tại sao bạn lưu trữ URL với backslashes thay vì dấu gạch chéo)

Bạn có thể muốn bình thường hóa các URL của bạn trước khi sử dụng chúng để bạn có thể tránh được những thứ như http://openid.test.com/abchttp://openid.test.com/abc/ được xử lý như các URL khác nhau.

biện pháp bổ sung để có

Không. Bạn chỉ nên sử dụng thư viện từ http://openid.net/developers/libraries.

Xác nhận danh tính của người dùng là vấn đề của nhà cung cấp. Chỉ người dùng và trang web mới biết mật khẩu cho tài khoản.

Nếu ai đó có URL OpenID của bạn (công khai), anh ấy vẫn cần mật khẩu (hoặc một phương pháp xác thực khác như chứng chỉ SSL) để có thể đăng nhập.

+0

Tôi đã sử dụng dấu gạch chéo ngược vì đó là những gì RPX đã cho tôi qua API của họ. Không thực sự quan trọng quá lâu. Đối với thư viện, tôi sẽ sử dụng RPX, trong đó có một API nhất quán và một giao diện người dùng tốt đẹp. – CMircea

+0

Cảm ơn, tôi đã tự hỏi tại sao và khi bạn nói vấn đề là phải có một cái gì đó phù hợp. – Kru

-1

tôi nhận thấy một câu trả lời cho câu hỏi đầu tiên:

Nếu người dùng không thể hoặc không muốn sử dụng OpenID, hợp tác với một nhà cung cấp hiện có và ký lên trực tiếp trong trang web, hoặc trở thành một nhà cung cấp bản thân mình (mặc dù điều này có nghĩa là có tên người dùng cổ điển + mật khẩu tài khoản là tốt, và loại bỏ các điểm của câu hỏi -> chỉ sử dụng OpenID).

3

Arg, trả lời-fying bình luận trước đây của tôi ở trên.

Để câu hỏi thứ ba của bạn "biện pháp ... để ngăn người khác đăng nhập với tư cách người dùng khác ...", như tôi hiểu OpenId, bạn không bao giờ chấp nhận Url OpenId từ nguồn không đáng tin cậy. Khi triển khai, trang web của bạn lưu trữ thông tin đăng nhập của nhà cung cấp, trang web của nhà cung cấp liên hệ với bạn trực tiếp, vì vậy bạn luôn chấp nhận Url OpenId từ một trang web đáng tin cậy.

Nói cách khác, ngay cả khi một người sử dụng độc hại thu thập OpenID như Pokemon, họ không có phương tiện để truy cập vào hệ thống của bạn.

Để câu hỏi thứ hai của bạn "cách tôi lưu trữ ..." giản đồ của bạn sẽ hoạt động, mặc dù có vẻ hơi thoải mái. Ví dụ: bằng cách sử dụng ánh xạ nhiều đối tượng [tức là UserID to OpenID], bạn cho phép người dùng thuộc về nhiều OpenIds và một OpenId duy nhất thuộc về nhiều người dùng. Bạn muốn cái cũ mà không có cái sau.

Ràng buộc khóa ngoại chính đơn giản sẽ đủ.

UserID  Email   
------  --------------- 
86000  [email protected] 
86001  [email protected] 

UserID  Identifier 
------  ---------------- 
86000  https:\\me.yahoo.com\bob#d36bd 
86000  https:\\me.yahoo.com\bigbobby#x75af 
86001  https:\\me.yahoo.com\alice#c19fd 

Cung cấp UserID là khóa ngoại để Users bảng và có một ràng buộc khoá duy nhất trên Identifier, điều này về cơ bản khẳng định một User sở hữu không hay nhiều độc đáo Identifier s. Về nguyên tắc, tôi có lẽ sẽ tát một khóa chính trên bàn đó, nhưng đó là nước thịt.

Hope this helps :)

PS nếu bạn có nghi ngờ về tích hợp hoặc tận dụng OpenID, sau đó bước qua một thực hiện. Xác định từng bit nguồn trong Url OpenId, sau đó tự hỏi xem liệu người dùng độc hại có thể truy cập vào điểm nhập đó không. Tôi hy vọng chỉ có một điểm vào như vậy và không thể tiếp cận với tất cả mọi người ngoại trừ các nhà cung cấp OpenId đáng tin cậy.

+0

Tôi quên UserID trong bảng thứ hai. Đã sửa. – CMircea

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