أفضل الممارسات لفضح نقاط نهاية متعددة خاصة بالعميل في خدمة WCF؟

StackOverflow https://stackoverflow.com/questions/3813656

سؤال

المضي قدمًا في إعادة تصميم بنية خدمة الويب باستخدام WCF ، يناقش فريقنا كيف نريد فضح نقاط النهاية. مثال: لدي نقطة نهاية قياسية يمكن لجميع المستخدمين استخدامها مع الرمز المميز المناسب ، لكن لدي أيضًا عدد من نقاط النهاية التي ستستخدم أمان الشهادة بدلاً من ذلك. ستستخدم جميع نقاط النهاية في نهاية المطاف نفس التنفيذ ، لذلك فهذه مجرد طرق مختلفة للوصول إلى النظام.

سيتعين على نقاط النهاية الشهادة الإشارة إلى شهادة محددة في المتجر ، لذا ستعمل فقط على عميل واحد محدد. الفكر هو أن خدمتنا القياسية يمكن أن تعيش في http://mysite.com/myservice.svc وستكون نقاط نهاية الشهادة شيئًا مثل http://mysite.com/myservice.svc/acme. القلق هنا هو أنني أضع قائمة عملائنا بفعالية في WSDL لدينا ، وهو أمر غير مرغوب فيه.

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

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

المحلول

لا تحتاج إلى إنشاء نقطة نهاية منفصلة لكل عميل. قم بإنشاء نقطة نهاية واحدة مع المصادقة بناءً على شهادة العميل وتنفيذ خاص بك x509CertificateValidator مع منطق المصادقة الخاص بك.

نصائح أخرى

تكوين سلوك الخدمة الخاص بك مثل:

       <behavior name="CertBeh">

            <serviceCredentials>

                <clientCertificate>

                    <authentication certificateValidationMode="PeerTrust" />

                </clientCertificate>

            </serviceCredentials>

        </behavior>

يخبر Peertrust WCF بالبحث عما إذا كانت الشهادات المقدمة من العملاء في متجر TrustedPeople. لذا ، ضع جميع شهادات العميل على المتجر في المربع حيث توجد خدمتك وستكون بخير. يرى هذه المقالة للخيارات الأخرى الممكنة.

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