سؤال

أنا حاليا تصميم مخطط عضوية / ملف تعريف لمشروع جديد أعمل عليه وأتمنى أن أحصل على بعض المدخلات من الآخرين.

المشروع هو تطبيق ويب ASP.NET وبسبب الإطار الزمني القصير، أحاول استخدام أي مكونات .NET Framework المدمجة. من المحتمل أن يستمتع الموقع بالترفيه عن <5000 مستخدم. سيكون لكل مستخدم لديه ملف تعريف حيث ستستمر الإعدادات والكائنات المخصصة بين الزيارات.

أنا مطلوب لاستخدام دليل نشط موجود للمصادقة. نظرا لأن المخطط الإعلاني لا يمكن تمديده لعقد حقول جديدة، فأنا مطلوبة لعقد إعدادات المستخدم والكائنات في متجر بيانات مختلف. كما قيل لي آدم ربما ليس حلا ممكنا.

كنت آمل استخدام مزود عضوية Active Directory لمخطط المصادقة الخاص بي وموفر ملف تعريف SQL كمخزن بيانات ملف تعريف المستخدم. أفضل أن لا لبناء مزود ملف تعريف مخصص، لكنني لا أرى أن هذا يطرح الكثير من المشكلة إذا لزم الأمر.

كنت أتساءل عما إذا كان هذا حلا ممكنا، وإذا كان الأمر كذلك، فقد كان لدى أي شخص حظا في هذا النهج.

اي تعليقات سوف يتم تقديرها.

شكرا.

هل كانت مفيدة؟

المحلول

أولا، لم أفعل هذا بنفسي.

هناك سلسلة ممتازة حقا (14 جزءا من أجزاء) على الموضوع بأكمله من عضوية ASP.NET 2.0، الأدوار وأنظمة مزود الملف الشخصي من Scott Mitchell في 4 شباب من الرول.

وفقا لفهمي، يجب أن تكون قادرا على تكوين هذا السلوك الذي تبحث عنه باستخدام هذه الأقسامين بشكل أساسي في Web.config:

  <!-- 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>

أعتقد أن هذا يجب أن يعمل :-)

نصائح أخرى

بالإضافة إلى ذلك على النحو الذي أجابه MARC:

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

قد تحتاج أيضا إلى إضافة

connectionStringName="ADService",
attributeMapUsername="sAMAccountName"

مع سلسلة اتصال orpesponnding

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

إذا كنت تستخدم .NET 4.0، فستحتاج إلى استبداله

Version=2.0.3600 

مع

Version=4.0.0.0

حتى النهاية ،

<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>

وبما أنه يتم تعيينه بشكل افتراضي، فيمكن الإشارة باسم:

MembershipProvider provider = Membership.Provider; 

شكرا على المعلومات، ساعد الكثير. أيضا بدلا من تحديد المزود الافتراضي مع MembershipProvider provider = Membership.Provider; يمكنك ضبطه في علامة العضوية.

<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">

"لقد كتبت أيضا صغرا وكيفية التنزيل لمشروع Visual Studio ومصدر تم تكوينه لاستخدام ASPNetActiveTirectorymembershipprovider.

المصادقة القائمة على أشكال ASP.NET - باستخدام ASPNetActiveTirectorymembershipprovider

أنا أستخدم Visual Studio 2012 وحاول القيام به كما تم التضخم، ولكن يتم عرض خطأ:

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

لذلك اكتشفت أن هناك بعض التغييرات يجب أن يتم ذلك لنموذج تسجيل الدخول الافتراضي على VS2012 مع MVC 4 و Entity Framework كما يلي:

في ملف "AccountController.cs"

في "ActionResult Resign (نموذج LoginModel، String Eardurl)"

غير ال

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

بالنسبة

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

على "حركة تسجيل الخروج العامة ()"

غير ال

    WebSecurity.Logout();

بالنسبة

    FormsAuthentication.SignOut();

وإضافة ما يلي: ForsAuthentication.setauthcookie (النموذج. اسمي، خطأ)؛

    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);
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top