簡體   English   中英

.NET Core-在IIS上通過Windows身份驗證從MVC應用程序調用Web API會導致HttpRequestException 401(未經授權)狀態代碼

[英].NET Core - Calling Web API from MVC Application with Windows Authentication on IIS Results In HttpRequestException 401 (Unauthorized) Status Code

我正在使用Web API和MVC應用程序在.NET Core 1.1上開發Web應用程序。 當我嘗試將應用程序托管在IIS上時從應用程序內部調用Web API時遇到問題。

  • 我在同一IIS網站上同時擁有MVC和API應用程序,並且都啟用了Windows身份驗證(使用NTLM /協商提供商)。

  • 我在web.config中具有forwardWindowsAuthToken = true。

  • 我可以直接從Postman / Web瀏覽器調用API URL並接收JSON結果

  • 所有的API調用都是在HttpClient中進行的,其中HttpClientHandler的構造函數具有UseDefaultCredentials = true

  • 如果我在桌面上運行MVC應用程序(通過帶有調試的Visual Studio通過IE運行),並使其指向IIS網站上的Web API,我將得到正確的JSON結果,並且沒有401錯誤。

  • 將MVC應用程序上的托管URL更改為localhost而不是完全限定的URL不會對問題產生影響

我認為這與ASP.NET Core沒有將正確的憑據從我的MVC應用程序轉發到Web API有關。 我花了幾個小時試圖找到完全一樣的人,但是大多數解決方案和問題的變化都與此略有不同,針對這些問題提出的解決方案對我沒有任何幫助。

誰能闡明這個問題,或者指出我在做錯什么? 這是我對基本索引頁面進行的API調用的示例...

    public async Task<IncidentWrapper> GetIndex(int limit, int offset)
    {
        using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }))
        {
            var response = await client.GetStringAsync("https://<some.server.name>/<appname>/api/v1/Incidents?limit=10&offset=0");
            return JsonConvert.DeserializeObject<IncidentWrapper>(response);
        }
    }

花了我很長時間才弄清楚這一點。 如果您陷入困境,則必須通過MVC應用程序在Intranet上調用Web API,並且它們位於同一站點(例如, http://my.websi.te/applicationhttp:// my。 websi.te / application / api ),您會遇到401錯誤,這是因為Microsoft在同一服務器上內置了回調循環檢測功能。 我通過按照位於此處的Microsoft知識庫中的第一種方法解決了問題

暫無
暫無

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

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