Вам необходимо включить проверку подлинности Windows, если вы еще этого не сделали.Инструкции здесь: https://support.microsoft.com/en-in/help/323176/how-to-implement-windows-authentication-and-authorization-in-asp-net
Но основная идея заключается в том, что вы используете это в своем файле web.config:
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
Затем вы можете использовать это, чтобы получить UserPrincipal
объекттекущий пользователь:
UserPrincipal.FindByIdentity(domain, User.Identity.Name)
Но у вас могут возникнуть проблемы с используемой учетной записью, поскольку вашему веб-сайту также необходимо пройти аутентификацию в AD с учетными данными домена.
DefaultAppPool использует локальную учетную запись длясервер, не распознаваемый AD.Вы можете передавать учетные данные AD в конструкторе PrincipalContext
, например:
using (var ctx = new PrincipalContext(ContextType.Domain, null, "username", "password"))
Я думал, что NetworkService использует учетную запись компьютера AD для аутентификации, но, возможно, ваш сервер не присоединен к домену?Если это не так, то вам также необходимо указать имя домена в PrincipalContext
:
using (var ctx = new PrincipalContext(ContextType.Domain, "domain.com", "username", "password"))
. Это работает, когда вы запускаете его локально в IIS Express, потому что IIS Express работает под вашими учетными данными и использует вашиучетные данные для аутентификации в AD.