سؤال

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

واجهة موفر دعم الأمان (SSPI) فشلت المفاوضات.

فعلت القليل من البحث و يبدو WCF يستخدم مصادقة Windows بشكل افتراضي.أود تغييره إلى استخدام مصادقة لا, ولكن أنا لست متأكدا تماما كيف.هنا هو كيف config تبدو الآن.

<system.serviceModel>
    <services>
        <service behaviorConfiguration="XX.ZZ.WebService.MyServiceBehavior"
         name="XX.ZZ.WebService.MyService">
            <endpoint  address="" binding="wsHttpBinding" contract="XX.ZZ.WebService.IMyService">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="XX.ZZ.WebService.MyServiceBehavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

وأود أن نقدر بعض المؤشرات ، أو الوكز في الاتجاه الصحيح.

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

المحلول

إن خدمة يستخدم wsHttpBinding ، التي بشكل افتراضي سوف تتطلب ويندوز بيانات اعتماد المستخدم التي الخاص بك المستخدمين الخارجيين من الواضح أنه لن يكون.ليس WCF في نفسه أن يستخدم بيانات اعتماد Windows بشكل افتراضي (حسب الدولة) ، ولكن في الحقيقة هذا الخصوص ملزمة (wsHttpBinding) - بائعين آخرين قد الافتراضي إلى إعدادات أخرى.

لديك عدة خيارات:

  • تكوين wsHttpBinding (وهو بدلا من "الوزن الثقيل") لاستخدام أمن في كل شيء ، أو استخدام اسم المستخدم/كلمة المرور الأمن التي المتصلين أن تقدم
  • استخدام basicHttpBinding مع عدم الأمن بدلا من ذلك (هذا هو ASMX النموذج الأساس)

لإيقاف الأمن تماما من wsHttpBinding ، وتشمل هذه في التكوين:

<bindings>
  <wsHttpBinding>
    <binding name="NoSecurity">
      <security mode="None" />
    </binding>
  </wsHttpBinding>
</bindings>

ثم تكوين النهاية إلى استخدام هذا ملزم التكوين:

<system.serviceModel>
    <services>
        <service name="XX.ZZ.WebService.MyService"
                 behaviorConfiguration="XX.ZZ.WebService.MyServiceBehavior">
           <endpoint address="" 
                     binding="wsHttpBinding" 
                     bindingConfiguration="NoSecurity" 
                     contract="XX.ZZ.WebService.IMyService">
            </endpoint>
            <endpoint address="mex" 
                      binding="mexHttpBinding" 
                      contract="IMetadataExchange" />
        </service>
    </services>

هل يمكن أن تفعل الشيء نفسه مع <basicHttpBinding> بدلا من <wsHttpBinding> إذا كنت ترغب في ذلك (لا يوجد فائدة في استخدام wsHttpBinding مقابلbasicHttpBinding ، إذا كنت إيقاف الأمن وغيرها من الميزات المتقدمة التي wsHttpBinding العروض).

هناك أيضا جيدة حقا بلوق وظيفة سلسلة التي تتحدث عن أساسيات WCF الأمن في خمس مختلف السيناريوهات النموذجية - قراءة ممتازة!

مارك

نصائح أخرى

وهذا يمنحك الأمان على مستوى النقل مع عدم المصادقة:

<configuration>  <system.serviceModel>
    <services>
      <service 
          name="Microsoft.ServiceModel.Samples.CalculatorService"
          behaviorConfiguration="CalculatorServiceBehavior">
        <endpoint address=""
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding1" 
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="Binding1">
          <security mode="Transport">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>  </system.serviceModel>
</configuration>

لسيناريوهات أخرى أود أن إلقاء نظرة على في عينات مايكروسوفت WCF .

وWCF يمكن أن يكون الألم الحقيقي عندما يتعلق الأمر تكوينه. نلقي نظرة على WCFSecurity أنها توفر عينات عمل جيدة للبيئات التكوين المختلفة.

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