[英]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
但他們返回空對象.... 我該如何解決這個問題?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.