2009-08-07 33 views
12

Tôi đang đặt một kế hoạch với nhau cho một loạt các trang web sẽ chia sẻ thông tin tài khoản người dùng giữa chúng. Ý tưởng là khi người dùng đăng nhập bằng OpenID của họ, họ có thể truy cập bất kỳ trang web nào và họ sẽ biết họ là ai.SSO nhiều trang web ASP.NET MVC sử dụng OpenID

Các mẫu phổ biến/thực tiễn tốt nhất mà tôi có thể sử dụng để đạt được điều này là gì?

+0

Tôi nghĩ rằng tôi có vấn đề tương tự. Bạn có thể mô tả cách bạn thực hiện nó? –

Trả lời

12

Nếu tất cả các trang web chia sẻ tên máy chủ chung trong URL của chúng thì bạn có thể đặt cookie xác thực (FormsAuthentication.SetAuthCookie) chỉ định đường dẫn của cookie là "/" để tất cả các trang web có thể thấy người dùng đã đăng nhập.

Nếu trang web không chia sẻ tên máy chủ chung, tôi nghĩ cách duy nhất để có được "đăng nhập một lần, đăng nhập ở mọi nơi [trong vòng các trang web] của bạn" một trang web (có lẽ một trang dành riêng để xác thực người dùng) và cho các trang web khác chuyển hướng người dùng đến trang web đó để xác thực và sau đó trang web đó sẽ chuyển hướng trở lại. Về bản chất, trang auth đó trở thành một nhà cung cấp nhận dạng, và gần như hoàn toàn chính xác vai trò của một nhà cung cấp OpenID (trong thực tế, DotNetOpenAuth có thể được sử dụng ở đây cho mục đích chính xác này). Vì có vẻ như mục tiêu của bạn là cho phép người dùng đăng nhập bằng OpenID của họ, nhà cung cấp OpenID của bạn trên một trang web xác thực đó có thể sử dụng OpenID để xác thực người dùng. Nhà cung cấp OpenID ủy nhiệm thuần túy của riêng bạn có thể được viết sao cho nó luôn đáp ứng ngay lập tức các yêu cầu kiểm tra ngay lập tức miễn là Realm trong yêu cầu xác thực là một trong những trang đáng tin cậy của bạn. Do đó, bạn có thể thực hiện đăng nhập một lần trên tất cả các trang web của mình.

+0

RE đặt cookie xác thực toàn cầu: điều đó có gây ra lỗ hổng không? Tôi quên loại tấn công này được gọi là gì, nhưng đó là khi authcookie bị đánh cắp. Hay tôi nhầm là điều này không an toàn? Một điều nữa - đó là cách các trang web Stack Exchange mới thực hiện điều đó (sau khi bạn đăng nhập vào tài khoản chính, bạn sẽ tự động đăng nhập vào meta của nó)? –

+0

Đây không phải là cookie toàn cầu. Nó chỉ rộng bằng một máy chủ Internet duy nhất, như hầu hết các cookie. Và bạn chỉ muốn làm điều này nếu bạn kiểm soát hoặc tin tưởng tất cả các trang web trên máy chủ lưu trữ đó. Nếu tất cả các trang web * .stackexchange.com chia sẻ thông tin đăng nhập cho người dùng, thì có lẽ cookie là toàn miền. –

1

Hãy xem xét các mẫu sau & Practices về an ninh Web Service từ Microsoft:

Brokered Xác thực - http://msdn.microsoft.com/en-us/library/aa480560.aspx

Các chủ đề chính là - Bảo mật Web Service

kịch bản, Patterns, và Hướng dẫn thực hiện cho Các cải tiến dịch vụ web (WSE) 3.0

http://msdn.microsoft.com/en-us/library/aa480545.aspx

Cuối cùng, bạn có thể thực hiện rất nhiều cách. Tôi đã đạt được một dấu hiệu đơn giản bằng cách tạo một url với một mã thông báo từ một trang web trỏ đến một tên miền khác. Mã thông báo được mã hóa & chứa các chi tiết để gửi lại miền trước đó. Khi nhận được yêu cầu đến trên tên miền thứ hai, dịch vụ web cơ bản sẽ kiểm tra xem mã thông báo của yêu cầu đến có hợp lệ với tên miền trước đó bằng bí mật được chia sẻ riêng tư hay không, được cả hai tên miền biết đến.

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