Проверка подлинности Windows не работает с веб-страницей ASP.NET - PullRequest
1 голос
/ 05 ноября 2010

Я пытаюсь зайти на свой веб-сайт в интрасети и заставить его выполнить простой SQL-запрос от имени пользователя Windows, в который я вошел как.

Когда я отлаживаю через Visual Studio, все отлично работает. Когда я захожу на веб-сервер, я получаю сообщение об ошибке от sqlconnection: «ОШИБКА: сбой входа для пользователя YOUR_DOMAIN \ YOUR_WEBSERVER_NAME».

Request.ServerVariables[AUTH_USER]: YOUR_DOMAIN\UserBob 
System.Security.Principal.WindowsIdentity.GetCurrent().Name: NT AUTHORITY\NETWORK SERVICE
Page.User.Identity.Name: YOUR_DOMAIN\UserBob
System.Threading.Thread.CurrentPrincipal.Identity.Name: YOUR_DOMAIN\UserBob

Так как мне заставить SQL-запрос выполняться в UserBob?

Вот мои настройки:

  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <authentication mode="Windows"/>
    <identity impersonate="true"/>
    <customErrors mode="Off"/>
  </system.web>

Веб-сервер - это сервер Win 2008 с IIS7, аутентификация Windows включена, аутентификация Anon выключена.

Код просто:

Response.Write("Request.ServerVariables[AUTH_USER]: " + Request.ServerVariables ["AUTH_USER"].ToString());
Response.Write("<br>System.Security.Principal.WindowsIdentity.GetCurrent().Name: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Response.Write("<br>Page.User.Identity.Name: " + Page.User.Identity.Name);
Response.Write("<br>System.Threading.Thread.CurrentPrincipal.Identity.Name: " + System.Threading.Thread.CurrentPrincipal.Identity.Name);

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CarbonDB"].ConnectionString);

conn.Open();

SqlCommand sqlcom = new SqlCommand("dbo.runsomething", conn);
sqlcom.CommandType = CommandType.StoredProcedure;
SqlDataReader sqlDataReader = sqlcom.ExecuteReader();

conn.Close();

Ответы [ 2 ]

1 голос
/ 05 ноября 2010

SQL Server находится на другом компьютере, чем веб-сервер?

Если это так, проблема, с которой вы сталкиваетесь, связана с делегированием Kerberos. По сути, ваш веб-сервер не имеет разрешения / возможности выдавать себя за конечного пользователя за другой сервер.

Попробуйте эту ссылку для получения дополнительной информации о делегировании.

Имейте в виду, что это не тривиально и требует помощи сетевого администратора, поскольку включает в себя внесение изменений в среду Active Directory.

Если возможно, используйте учетную запись службы (например, Сетевая служба) для доступа к SQL Server.

Erick

0 голосов
/ 05 ноября 2010

Сайт использует интегрированный или классический конвейерный режим. В IIS7 проверьте Основные параметры веб-сайта, нажмите Подключить как ... и убедитесь, что установлен флажок для пользователя приложения (сквозная аутентификация).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...