簡體   English   中英

ASP.NET Core 2.1,C#應用程序,C#Web服務,訪問SQL數據庫

[英]asp.net core 2.1, C# app, c# web service, access SQL database

我整個星期都在與以下問題作斗爭,並希望有人能提供幫助。 我的應用程序分為三個部分。

  1. 一個SQL數據庫(自己的計算機),
  2. Web服務(IIS計算機)和
  3. 應用程序本身(也與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之前已獲得了該用戶)。 Claims.ClaimsPrincipal)。

我知道問題是,盡管我使用的是正確的用戶,但身份沒有傳遞給Web服務。 有任何想法嗎?

好的,所以經過大量在線研究之后,我發現了問題所在。 自2003年以來,Microsoft實施了針對中間人攻擊的環回檢查-由於我的FQDN與URL基址不同,這對我造成了問題。 我停用了此檢查( http://artykul8.com/2010/01/windows-server-iis-sharepoint-and-null-sid-audit-failures/ ),現在我的憑據已正確通過。 由於這是一個測試服務器,因此此解決方案沒有問題:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM