Windows身份验证不适用于ASP.NET网页

时间:2010-11-04 22:42:39

标签: asp.net windows-authentication

我正在尝试访问我的Intranet网站并让它运行一个简单的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

那么如何在UserBob下执行SQL查询?

这是我的设置:

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

Webserver是Win 2008服务器,带有IIS7,Windows身份验证,Anon Auth关闭。

代码很简单:

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 个答案:

答案 0 :(得分:1)

SQL Server与Web服务器位于不同的计算机上吗?

如果是这样,您遇到的问题与Kerberos委派相关。基本上,您的Web服务器没有权限/能力将最终用户模拟到另一台服务器。

Try this link for more information on delegation.

请注意,这并非易事,需要网络管理员的帮助,因为它涉及对Active Directory环境进行更改。

如果可能,请使用服务帐户(如网络服务)访问SQL Server。

埃里克

答案 1 :(得分:0)

网站是使用集成还是经典管道模式。在IIS7中,检查网站的基本设置,单击 Connect As ... 并确保选中应用程序用户(传递身份验证)。

相关问题