Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net core 2.1、C#app、C#web服务、access SQL数据库_C#_Sql Server_.net Core - Fatal编程技术网

asp.net core 2.1、C#app、C#web服务、access SQL数据库

asp.net core 2.1、C#app、C#web服务、access SQL数据库,c#,sql-server,.net-core,C#,Sql Server,.net Core,我整个星期都在努力解决以下问题,希望有人能帮上忙。我的申请有三个部分 SQL数据库(自己的机器) web服务(IIS计算机)和 应用程序本身(也在与web服务相同的IIS上) 应用程序与web服务对话,web服务从SQL数据库获取数据。我正在使用windows身份验证。当应用程序在我的机器上本地运行时,它会毫无问题地从web服务接收数据。当我在web服务器上托管应用程序(应用程序和web服务都托管在同一台机器上)时,我会收到401(身份验证)错误 在应用程序中,我获取当前windows用户在控制

我整个星期都在努力解决以下问题,希望有人能帮上忙。我的申请有三个部分

  • SQL数据库(自己的机器)
  • web服务(IIS计算机)和
  • 应用程序本身(也在与web服务相同的IIS上) 应用程序与web服务对话,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.ClaimsPrincipal之前获得了该标识)


    我知道问题在于,虽然我使用的是正确的用户,但身份没有传递给web服务。有什么想法吗?

    好的,经过大量的在线研究,我发现了这个问题。自2003年以来,Microsoft对中间人攻击实施了环回检查-这给我带来了问题,因为我的FQDN与URL基址不同。我已停用此检查(),现在我的凭据已正确通过。因为这是一个测试服务器,所以我对这个解决方案没有问题:)

    您可以在IIS中发布您的应用程序配置的提供程序吗。您使用Kerberos还是NTLM?您是否已正确配置SPN?如果是这样的话,也把它们贴出来。您的事件日志或日志文件中有什么可以显示给我们的吗?我的设置是“LandingPage\Application”,因为我只能有一个DNS条目(来自IT人员)。这意味着我有两个应用程序在同一页下。我检查了应用程序、登录页和服务器,它们都将System.Web.Security.SqlRoleProvider和System.Web.Security.WindowsTokenRoleProvider设置为继承。我找不到它的继承地。我正在使用NTLM。我刚刚重新启动了应用程序,在事件日志中根本没有任何条目。。。希望这些信息有帮助!对于身份验证,我将所有设置都设置为禁用,但Windows身份验证除外,Windows身份验证已启用,HTTP 401 Challange设置为启用