صندوق رأس المال العامل:طلب رمز الأمان لا يمكن أن يكون راضيا لأنه فشل المصادقة

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

سؤال

لدي اثنين من خدمات WCF على نفس الجهاز.واحد هو ناشر واحد هو المستمع.

الناشر هو حيوي إنشاء الوكلاء استنادا إلى نقطة النهاية.أنا تكوين الوكيل في رمز مثل هذا:

            WSHttpBinding binding = new WSHttpBinding(SecurityMode.Message, true);
            binding.Security.Message.NegotiateServiceCredential = true;
            binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
            binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
            binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
            binding.Security.Message.EstablishSecurityContext = true;
            binding.ReliableSession.Enabled = true;
            binding.TransactionFlow = true;
            return binding;

ثم...

            Binding binding = GetBindingFromAddress(address);

            ChannelFactory<T> factory = new ChannelFactory<T>(binding);
            factory.Credentials.UserName.UserName = "an account on the machine";
            factory.Credentials.UserName.Password = "a password for that account";

            T proxy = factory.CreateChannel(new EndpointAddress(address));

عندما أذهب إلى جعل دعوتي أتلقى الخطأ المذكورة أعلاه.هنا هو بلدي المستمع config:

   <service behaviorConfiguration="MEX Enabled" name="InvoiceSubscriber">
<endpoint binding="wsHttpBinding"
          bindingConfiguration="ReliableTransactionalHTTP"
          contract="AtlanticBT.SubscriptionService.Contracts.v1.IAtlanticEvents">
 <identity>
  <dns value="localhost" />
 </identity>
</endpoint>

        <bindings>
        <wsHttpBinding>
            <binding name="ReliableTransactionalHTTP" transactionFlow="true">
                <reliableSession enabled="true"/>
      <security mode="Message">
        <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
        <message clientCredentialType="Windows" negotiateServiceCredential="true" 
                 algorithmSuite="Default" establishSecurityContext="true"/>
      </security>
            </binding>
  </wsHttpBinding>
    </bindings>

لقد راجعت كل ACL على الدلائل التي تستضيف خدمات ويبدو أنها صحيحة.IIS الأمن هو الوصول المجهول و مصادقة Windows.

حتى إذا أنا صراحة إعداد وثائق التفويض في التعليمات البرمجية ، لماذا لا يمكن لي المستمع مصادقة?

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

المحلول

أولا عادة ما تعني هذه الرسالة الآلات ليست في نفس المجال ، وبالتالي لا يستطيعون التواصل باستخدام نظام التشغيل Windows الأمن.هي اثنين من الخوادم في نفس المجال ؟

ثانيا ، لقد تكوين نقطة النهاية الخاصة بك لاستخدام ويندوز الأمن.يمكنك استخدام Windows الأمن ليس فقط في مستوى الرسالة ، ولكن على مستوى النقل.على حد سواء يبدو مبالغة ربما تريد أن تفعل النقل.

ثالثا ، كل ما عليك تكوين يقول "أريد أن استخدام مصادقة Windows", ولكن بعد ذلك يتم إعداد UsernameClientCredentials خصائص ClientCredentials.هذه الخصائص هي فقط تستخدم اسم المستخدم رمز الأمن ليس ويندوز.Windows الأمن هو ذاهب الى اتخاذ هوية الترابط الحالي و إلى الأمام على.

على افتراض نيتك كانت تستخدم ويندوز الأمن ، ثم تحتاج إما إلى:

  1. تشغيل الناشر العملية في إطار واحد ويندوز هوية تريد أن يكون التواصل مع المشتركين.
  2. استخدام التمثيل داخل الناشر عملية تغيير سياق الأمان لكل دعوة (أنظر إلى WindowsIdentity.انتحال شخصية لمزيد من المعلومات)

الآن كنت تقنيا القيام #1 حتى لو كنت تعتقد أنك تفعل #2 عن طريق تحديد اسم المستخدم/كلمة المرور خصائص منذ يجري تجاهلها.

وأخيرا إليك بعض وثائق جيدة حول كيفية إعداد الارتباطات لأنواع مختلفة من مصادقة Windows سيناريوهات:


أبعد من ذلك, أنا لا أعرف ماذا أستطيع أن أعطي دون المزيد من المعلومات منك.إذا كنت مراجعة السؤال لتوفير بعض مزيد من المعلومات/الإجابة على بعض أسئلتي سوف سرور مراجعة جوابي على أمل جعلها أكثر فائدة.

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