【发布时间】:2011-12-05 14:03:44
【问题描述】:
我在本地计算机上的 IIS Express 中运行了 WCF 服务。我正在使用 HTTP 基本身份验证(目前没有 SSL)。我有一个用于调用服务器的测试客户端。
我需要发起请求的用户名(基本身份验证的用户名部分)。我意识到 IIS 正在为我处理身份验证,并根据 Windows 用户帐户检查用户名/密码。这对我的目的来说很好。我的问题是,一旦调用了我的服务,我就无法在任何地方找到用户名。我以为它会在Thread.CurrentPrincipal.Identity.Name 中,但该值是一个空字符串。有没有办法访问这个值?
如果相关,这里有约束力:
<basicHttpBinding>
<binding name="basicauth" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="99999999" maxBufferPoolSize="524288" maxReceivedMessageSize="99999999"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" realm="" />
</security>
</binding>
</basicHttpBinding>
更新:谢谢大家。想通了我的问题。我没有正确关联我的端点和我的绑定,所以端点默认为一些动态绑定。即使我为基本身份验证配置了我的绑定,端点也没有设置为使用它。
一旦我解决了这个问题,用户名就出现在了
ServiceSecurityContext.Current.WindowsIdentity.Name
属性符合预期。
【问题讨论】: