Asp.net代表团

时间:2015-10-12 16:42:16

标签: asp.net sql-server iis kerberos kerberos-delegation

我正在制作一个通过调用SQL服务器获取数据的.Net Web API。用户通过Windows身份验证(Kerberos)进行身份验证。我希望通过委派将用户凭据传递给SQL服务器,但SQL服务器会看到匿名用户。

这就是我所做的:

  • IIS应用程序: 启用Windows身份验证和asp.net模拟。匿名和表单身份验证已禁用。 启用内核模式身份验证。 提供商:谈判,Kerberos。 使用应用池凭据:True。

  • 应用程序池: 托管管道模式:经典。 身份:网络服务。

  • 在AD中,运行Web服务器的计算机设置为“信任此计算机以便委派任何特定服务(仅限Kerberos)”

  • SQL Server的连接字符串包含Integrated Security = SSPI;

  • 编辑:在我的web.config中我有

PropertyMetadata

public partial class ArticleButton : UserControl
{
    public ArticleButton()
    {
        InitializeComponent();
    }

    public static readonly DependencyProperty TitleProperty =
        DependencyProperty.Register(
            "Title",
            typeof(String),
            typeof(ArticleButton),
            new PropertyMetadata("Test", TitlePropertyChanged));

    private static void TitlePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        (d as ArticleButton).TitlePropertyChanged(e);
    }

    private void TitlePropertyChanged(DependencyPropertyChangedEventArgs e)
    {
        //do something when property changed value
    }

    public String Title
    {
        get { return (string)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }
}
  • 为机器设置了通用HOST spn。

在浏览器中,我通过http://machinename.domain.net访问网络应用程序。

我希望在此设置中我的IIS应用程序在计算机帐户下运行?

当我在Web服务器上的调试器中捕获请求时,我可以看到WindowsIdentity.GetCurrent()。Name是浏览Web应用程序的用户的帐户和WindowsIdentity.GetCurrent()。AuthenticationType设置为“Kerberos” ”。所以这应该是好的。

然而,WindowsIdentity.GetCurrent()。ImpersonationLevel仅设置为“Impersonate”。我原以为它会被设置为“代表”?

当我向SQL服务器发出请求时,我收到“用户登录失败'NT AUTHORITY \ ANONYMOUS LOGON'”,因此很明显用户凭据不会传递给SQL服务器。

我希望有人能看出我做错了什么。我真的需要朝着正确的方向努力。

2 个答案:

答案 0 :(得分:2)

如果有人遇到同一问题,以备将来参考: 问题是我们尝试使用Chrome。它适用于IE,但在Chrome上,需要在此帖中提到的注册表更改:Kerberos delegation doesn't work in chrome

答案 1 :(得分:0)

您应该能够在IIS中将身份验证设置为ASP.NET模拟。您可能还需要在web.config文件中设置以下内容,作为<的System.Web>部分。

    <identity impersonate="true" />

&lt;&lt; system.webServer&GT;但由于安全问题,并不总是建议使用。

<validation validateIntegratedModeConfiguration="false" />