سؤال

أنا أقوم بتنفيذ نموذج BCS مخصص للحصول على بيانات من نظام الخلفية. نظرًا لأن الواجهة الخلفية تستخدم إدارة المستخدم الخاصة بها ، فأنا أقوم بالوصول إليها من خلال حساب خدمة.

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

هل يمكن لأي شخص أن يعطيني بعض النصائح ما هي طريقة تنفيذها؟ الواجهة الخلفية لا تعطيني ACLs ، لكنني أتساءل عما إذا كان بإمكاني "مزيفة" لهم بطريقة ما؟ (قول "هذه المجموعة NT هذه القراءة" جيدة بما فيه الكفاية).

إنني على دراية بـ ISECURITYTRIMMER2 للحصول على نتائج البحث ، لكن من الناحية المثالية ، أريد تغطية الأمان داخل نموذج BCS بحيث ينطبق على القوائم الخارجية أيضًا. أريد تجنب استخدام التخزين الآمن ورسم الخرائط لكل مستخدم فردي إلى الواجهة الخلفية.

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

المحلول

حصلت على إجابة هنا. يمكنني تعيين حقل في طراز BCS ليكون WindowsSecurityDescriptorfield ومن ثم يمكنني استخدام التعليمات البرمجية المخصصة في أساليب BCS الخاصة بي لإنشاء ACLS:

Byte[] GetSecurityDescriptor(string domain, string username)
{
    NTAccount acc = new NTAccount(domain, username);
    var sid = (SecurityIdentifier)acc.Translate(typeof(SecurityIdentifier));
    CommonSecurityDescriptor sd = new CommonSecurityDescriptor(false, false,
        ControlFlags.None,sid,null, null, null);
    sd.SetDiscretionaryAclProtection(true, false);

    //Deny access to everyone
    SecurityIdentifier everyone = new SecurityIdentifier(
        WellKnownSidType.WorldSid, null);
    sd.DiscretionaryAcl.RemoveAccess(AccessControlType.Allow, everyone, 
      unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);

    //Grant full access to specified user
    sd.DiscretionaryAcl.AddAccess(AccessControlType.Allow, sid,
      unchecked((int)0xffffffffL), InheritanceFlags.None, PropagationFlags.None);

    byte[] secDes = new Byte[sd.BinaryLength];
    sd.GetBinaryForm(secDes, 0);

    return secDes;
}

هذا يعمل بشكل جيد ويسمح لي بإنشاء ACLs مخصصة بمجرد ترجمة المستخدمين بين نظام الواجهة الخلفية و Active Directory.

ما زلت مهتمًا بسماع ما إذا كان لدى شخص ما طريقة أخرى إذا كان لديه أمان كجزء من نموذج BCS.

نصائح أخرى

إذا كنت ترغب في تجنب المتجر الآمن ، فسيبدو أن اختيارك الوحيد هو النجاح. الصيد هو أنه لا يمكنك استخدام NTLM. يجب عليك استخدام kerberos لأن NTLM لا يسمح بتفويض الهوية لأنك تنقل بيانات الاعتماد من المستخدم إلى خادم SharePoint إلى النظام الخارجي. عند استخدام Kerberos لتفويض الهوية ، تحتاج إلى إنشاء اسم SPN (مبدأ الخدمة) لخدمتك بحيث يعرف الإعلان أنه يُسمح له بتفويض الهويات.

المصادقة على نظامك الخارجي

يرى قم بإنشاء أسماء رئيسية للخدمة لتطبيقات الويب الخاصة بك باستخدام مصادقة Kerberos في هذه المقالة لإنشاء SPN.

أنا أستخدم نهجًا مختلفًا إلى حد ما. إذا قمت برمجية .NET كائنات لاسترداد البيانات من النظام الخارجي الخاص بك ، فيمكنك الوصول إلى كائن SPContext للتحقق من الموقع الذي تقوم به ، أو المستخدم الذي يقوم بالاستعلام عن البيانات. في الكود ، يمكنك استخدام هذه المعلومات لتصفية البيانات أي ما تريد.

وبالتالي فإن نفس الحالة بالضبط لقائمة خارجية على موقع SharePoint الخاص بك قد تُرجع 5 نتائج لاستخدام A ، ولكن 10 نتائج للمستخدم B استنادًا إلى اسم المستخدم أو ربما عضوية المجموعة. ليس من الصعب تنفيذها وتعمل في الواقع بشكل جيد.

الدفع http://jsiegmund.wordpress.com/2010/05/19/creating-bcs-objects-bcs-meta-man/.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top