У меня на локальном компьютере запущена служба WCF в IIS Express. Я использую HTTP Basic Authentication (без 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
свойство, как и ожидалось.