首页 > 解决方案 > asp.net core 2.1, C# app, c# web service, 访问SQL数据库

问题描述

我整个星期都在与以下问题作斗争,并希望有人能提供帮助。我的申请分为三个部分。

  1. 一个 SQL 数据库(自己的机器),
  2. Web 服务(IIS 机器)和
  3. 应用程序本身(也在与 Web 服务相同的 IIS 上)。

应用程序与 Web 服务对话,后者又从 SQL 数据库中获取数据。我正在使用 Windows 身份验证。当应用程序在我的机器上本地运行时,它会毫无问题地从 Web 服务接收数据。当我在 Web 服务器上托管应用程序(应用程序和 Web 服务都托管在同一台机器上)时,我收到 401(身份验证)错误。

在应用程序中,我获得了控制器中使用的当前 Windows 用户:

    System.Security.Claims.ClaimsPrincipal currentUser = this.User;
    WindowsIdentity identity = (WindowsIdentity) currentUser.Identity;

要访问 Web 服务(进而访问数据库),我使用以下代码:

    await WindowsIdentity.RunImpersonated(identity.AccessToken, async () =>
    {
        request = new HttpRequestMessage(HttpMethod.Get, uri);
    });

我已经在 IIS 上检查了当代码在服务器上运行时我得到了正确的身份 -> 我确实得到了 Windows 用户而不是 IIS AppPool 用户(在我换成使用 System.Security 之前我已经得到了它。 Claims.ClaimsPrincipal)。

我知道问题是尽管我使用了正确的用户,但身份并未传递给 Web 服务。有任何想法吗?

标签: c#sql-server.net-core

解决方案


好的,所以经过大量在线研究后,我发现了问题。自 2003 年以来,Microsoft 对中间人攻击实施了环回检查——这给我带来了问题,因为我的 FQDN 与 URL 基地址不同。我停用了此检查(http://artykul8.com/2010/01/windows-server-iis-sharepoint-and-null-sid-audit-failures/),现在我的凭据正在正确传递。由于这是一个测试服务器,我对此解决方案没有任何问题:)


推荐阅读