2009-05-21 45 views
16

Tôi hiện đang thiết kế một sơ đồ thành viên/hồ sơ cho một dự án mới mà tôi đang làm việc và tôi hy vọng sẽ nhận được một số đầu vào từ những người khác.Nhà cung cấp thành viên Active Directory và Nhà cung cấp hồ sơ SQL

Dự án là một ứng dụng web ASP.NET và do khung thời gian ngắn, tôi đang cố gắng sử dụng bất kỳ và tất cả các thành phần .NET framework được xây dựng mà tôi có thể. Các trang web có thể sẽ giải trí < 5000 người dùng. Mỗi người dùng sẽ có tiểu sử nơi cài đặt và đối tượng tùy chỉnh sẽ được duy trì giữa các lượt truy cập.

Tôi bắt buộc phải sử dụng Thư mục hoạt động hiện có để xác thực. Vì lược đồ AD không thể được mở rộng để giữ các trường mới, tôi bắt buộc phải giữ các thiết lập người dùng và các đối tượng trong một kho dữ liệu khác nhau. Tôi cũng đã được nói với ADAM có lẽ không phải là một giải pháp khả thi.

Tôi đã hy vọng sử dụng Nhà cung cấp thành viên Active Directory cho lược đồ xác thực của tôi và Nhà cung cấp hồ sơ SQL làm kho lưu trữ dữ liệu hồ sơ người dùng. Tôi không muốn xây dựng một nhà cung cấp hồ sơ tùy chỉnh, nhưng tôi không thấy điều này đặt ra nhiều vấn đề nếu cần thiết.

Tôi đã tự hỏi liệu đây có phải là giải pháp khả thi không, và nếu có, có ai đó có may mắn với phương pháp này không.

Mọi nhận xét sẽ được đánh giá cao.

Cảm ơn.

Trả lời

15

Trước hết - tôi chưa bao giờ tự làm điều này.

Có một loạt bài thực sự tuyệt vời (14 !! phần) về toàn bộ chủ đề của ASP.NET 2.0 thành viên, vai trò và hệ thống cung cấp hồ sơ của Scott Mitchell tại 4 Guys from Rolla.

Theo hiểu biết của tôi, bạn sẽ có thể cấu hình hành vi này, bạn đang tìm kiếm bằng cách sử dụng cơ bản hai phần trong web.config của bạn:

<!-- configure Active Directory membership provider --> 
    <membership defaultProvider="AspNetActiveDirectoryMembershipProvider"> 
    <providers> 
     <add name="AspNetActiveDirectoryMembershipProvider" 
      type="System.Web.Security.ActiveDirectoryMembershipProvider, 
       System.Web, Version=2.0.3600, Culture=neutral, 
       PublicKeyToken=b03f5f7f11d50a3a" /> 
    </providers> 
    </membership> 

    <!-- configure SQL-based profile provider -->  
    <profile defaultProvider="SqlProvider"> 
    <providers> 
     <add name="SqlProvider" 
     type="System.Web.Profile.SqlProfileProvider" 
     connectionStringName="SqlProfileProviderConnection" 
     applicationName="YourApplication" /> 
    </providers> 

    <!-- specify any additional properties to store in the profile --> 
    <properties> 
     <add name="ZipCode" /> 
     <add name="CityAndState" /> 
    </properties> 
    </profile> 

tôi sẽ nghĩ rằng đây nên làm việc :-)

+0

Cảm ơn Marc. Tôi đã chụp ảnh này sáng nay và mọi thứ diễn ra tốt đẹp. Cảm ơn bạn đã giúp đỡ! – cmcginty

+0

nếu chúng tôi sử dụng AD cho tư cách thành viên và xác thực và aspnet_profile để lưu trữ hồ sơ. Mối quan hệ được tạo ra và quản lý như thế nào. Tên người dùng. Nói cách khác, asp.net biết dựa trên thuộc tính nào của AD để tạo UserId? –

+0

Bạn có thể trả lời http://stackoverflow.com/questions/9588265/understanding-wcf-windows-authentication không? – Lijo

3

thêm vào đó là trả lời của Marc:

<add name="AspNetActiveDirectoryMembershipProvider" 
      type="System.Web.Security.ActiveDirectoryMembershipProvider, 
       System.Web, Version=2.0.3600, Culture=neutral, 
       PublicKeyToken=b03f5f7f11d50a3a" /> 

bạn cũng có thể cần phải thêm

connectionStringName="ADService", 
attributeMapUsername="sAMAccountName" 

với chuỗi kết nối corresponnding

<connectionStrings> 
    <add name="ADService" connectionString="LDAP://ServerIP" /> 
</connectionStrings> 

Nếu bạn đang sử dụng .net 4.0 thì bạn sẽ cần phải thay thế

Version=2.0.3600 

với

Version=4.0.0.0 

Vì vậy, cuối cùng,

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider"> 
     <providers> 
     <add name="AspNetActiveDirectoryMembershipProvider" 
      connectionStringName="ADService" 
      type="System.Web.Security.ActiveDirectoryMembershipProvider, 
       System.Web, Version=4.0.0.0, Culture=neutral, 
       PublicKeyToken=b03f5f7f11d50a3a" 
      attributeMapUsername="sAMAccountName"/> 
     </providers> 
    </membership> 

và kể từ khi nó được thiết lập như mặc định, nó có thể được tham chiếu như:

MembershipProvider provider = Membership.Provider; 
2

Cảm ơn thông tin, giúp mình rất nhiều.Ngoài ra thay vì Đặt Nhà cung cấp mặc định bằng MembershipProvider provider = Membership.Provider;, bạn có thể đặt nó bằng thẻ thành viên.

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

tôi "cũng đã được viết một nhỏ làm thế nào để và tải về một dự án Visual Studio và Nguồn cấu hình để sử dụng AspNetActiveDirectoryMembershipProvider.

ASP.NET Forms Based Authentication - using AspNetActiveDirectoryMembershipProvider

2

Tôi đang sử dụng Visual Studio 2012 và cố gắng để làm như sugested, nhưng một lỗi được hiển thị:

To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider". 

Vì vậy, tôi phát hiện ra rằng một vài thay đổi nên được thực hiện với hình thức đăng nhập mặc định trên VS2012 với MVC 4 và khuôn khổ thực thể như sau:

trong hồ sơ "AccountController.cs"

vào "public ActionResult Đăng nhập (mô hình LoginModel, chuỗi ReturnURL)"

Thay đổi

if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) 

cho

if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password)) 

vào "Logoff public ActionResult()"

Thay đổi

WebSecurity.Logout(); 

cho

FormsAuthentication.SignOut(); 

và thêm dòng sau: FormsAuthentication.SetAuthCookie (model.UserName, false);

public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid && Membership.Provider.ValidateUser(model.UserName, model.Password)) 
     { 

      FormsAuthentication.SetAuthCookie(model.UserName, false);    

      return RedirectToLocal(returnUrl); 
     } 

     // If we got this far, something failed, redisplay form 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
     return View(model); 
    } 
+0

+1 cảm ơn bạn! Đây chính xác là điều đã khắc phục vấn đề cho tôi. Không có nơi nào khác có tôi đi qua thông tin này khi tìm kiếm các vấn đề với 'AspNetActiveDirectoryMembershipProvider'. –

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