簡體   English   中英

周轉基金。 在服務端使用 Windows 憑據

[英]WCF. Use windows credentials on service side

我有 WPF 和服務的客戶。 它適用於安全模式=無。 但是現在我需要在服務端調用服務以在 Azure 上執行某些操作的用戶的 Windows 憑據。 所以我更改了配置,現在是以下內容:

服務

<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<client />
<bindings>
  <wsHttpBinding>
    <binding name="TrackingHoursServiceBinding" maxReceivedMessageSize="620000">
     <!-- WAS THIS 
    <security mode="None">
        <transport clientCredentialType="None" />
        <message establishSecurityContext="false" />
      </security> -->

    <!-- This is my changes  -->
      <security mode="Message">
        <message clientCredentialType="Windows" />
      </security>
    <!-- This my changes  -->
    </binding>
  </wsHttpBinding>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IPortableService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" receiveTimeout="00:10:00" sendTimeout="00:10:00" />
  </basicHttpBinding>
</bindings>
<services>
  <service behaviorConfiguration="AAA.AAA.AAA.AAA.TrackingHoursServiceBehavior" name="AAA.AAA.AAA.AAA.TrackingHoursService">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="TrackingHoursServiceBinding" contract="AAA.AAA.AAA.AAA.ITrackingHoursService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="pcl" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPortableService" contract="AAA.AAA.AAA.AAA.ITrackingHoursService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="AAA.AAA.AAA.AAA.TrackingHoursServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<extensions>
  <behaviorExtensions>
    <add name="connectionStatusBehavior" type="Microsoft.ServiceBus.Configuration.ConnectionStatusElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="transportClientEndpointBehavior" type="Microsoft.ServiceBus.Configuration.TransportClientEndpointBehaviorElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="serviceRegistrySettings" type="Microsoft.ServiceBus.Configuration.ServiceRegistrySettingsElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </behaviorExtensions>
  <bindingElementExtensions>
    <add name="netMessagingTransport" type="Microsoft.ServiceBus.Messaging.Configuration.NetMessagingTransportExtensionElement, Microsoft.ServiceBus,  Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="tcpRelayTransport" type="Microsoft.ServiceBus.Configuration.TcpRelayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="httpRelayTransport" type="Microsoft.ServiceBus.Configuration.HttpRelayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="httpsRelayTransport" type="Microsoft.ServiceBus.Configuration.HttpsRelayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="onewayRelayTransport" type="Microsoft.ServiceBus.Configuration.RelayedOnewayTransportElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </bindingElementExtensions>
  <bindingExtensions>
    <add name="basicHttpRelayBinding" type="Microsoft.ServiceBus.Configuration.BasicHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="webHttpRelayBinding" type="Microsoft.ServiceBus.Configuration.WebHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="ws2007HttpRelayBinding" type="Microsoft.ServiceBus.Configuration.WS2007HttpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="netTcpRelayBinding" type="Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="netOnewayRelayBinding" type="Microsoft.ServiceBus.Configuration.NetOnewayRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="netEventRelayBinding" type="Microsoft.ServiceBus.Configuration.NetEventRelayBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    <add name="netMessagingBinding" type="Microsoft.ServiceBus.Messaging.Configuration.NetMessagingBindingCollectionElement, Microsoft.ServiceBus, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </bindingExtensions>
</extensions>
</system.serviceModel>

客戶

 <system.serviceModel>
<bindings>
  <wsHttpBinding>
    <binding name="TrackingHoursServiceBinding" maxReceivedMessageSize="2147483647" useDefaultWebProxy="False">
      <readerQuotas maxDepth="32" maxStringContentLength="20000" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <!-- WAS 
     <security mode="None" /> 
     -->
     <security mode="Message">
        <message clientCredentialType="Windows" />
      </security>
    </binding>
  </wsHttpBinding>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_ITFSService" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://AAA/TrackingHoursService.svc" binding="wsHttpBinding" bindingConfiguration="TrackingHoursServiceBinding" contract="ITrackingHoursService" name="WSHttpBinding_ITrackingHoursService">
    <identity>
      <dns value="localhost" />
    </identity>
  </endpoint>
  <endpoint address="http://2121212/WSELFO/TFSService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITFSService" contract="ITFSService" name="BasicHttpBinding_ITFSService" />
</client>
</system.serviceModel>

在服務方面,我嘗試使用

System.Net.CredentialCache.DefaultCredentials

或者

System.Net.CredentialCache.DefaultNetworkCredentials

但他們返回空對象.... 我該如何解決這個問題?

經過我的測試,我發現System.Net.CredentialCache.DefaultCredentials 不返回null,無論是在客戶端還是在服務器端。 您想通過 System.Net.CredentialCache.DefaultCredentials 獲取用戶名、密碼或域嗎? 如果是這種情況,它將返回 null,因為 ICredentials 返回的實例 DefaultCredentials 不能用於查看當前安全上下文的用戶名、密碼或域。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM