簡體   English   中英

使用HttpClient在本地主機上調用rest api導致401未經授權的IIS 8.5

[英]Calling rest api on localhost using HttpClient causing 401 Unauthorized, IIS 8.5

我剛剛發現了一個奇怪的行為,並且我想知道是否有人對我的代碼為何如此表現有一個解釋。

我的情況是這樣的:我在c#中創建了兩個rest api,將它們稱為CoreApi和FrontApi。 兩種api在同一服務器上都有單獨的站點和appPool,而兩個appPool都作為NetworkService運行。 FrontApi使用HttpClient調用CoreApi。 我通過調用FrontApi的ValuesController觸發了調用,該控制器依次調用CoreApi。 CoreApi已啟用Windows身份驗證,而FrontApi具有匿名身份驗證。

如果我在開發機器上托管FrontApi,則一切正常,但是當FrontApi調用CoreApi時,使用完整URL在同一服務器上共同托管會導致401.0未經授權。 從FrontApi使用“ http:// localhost / api / values ”時,它可以正常工作。

有什么想法嗎?

HttpClientHandler authHandler = new HttpClientHandler()
{
    Credentials = CredentialCache.DefaultNetworkCredentials
};
using (HttpClient confClient = new HttpClient(authHandler))
{
    HttpResponseMessage message = await confClient.GetAsync("http://mysite.acme.com/api/values");
    if (message.IsSuccessStatusCode)
    {
        result = await message.Content.ReadAsStringAsync();
    }
    else
        result = message.StatusCode.ToString();
}

CredentialCache.DefaultNetworkCredentials屬性返回運行FrontApi IIS應用程序池的憑據。 CoreApi不知道如何認證FrontApi的ApplicationPoolIdentity,但應該能夠認證NetworkService。

如果將應用程序池標識從ApplicationPoolIdentity更改為NetworkService,則應該可以解決來自CoreApi的401響應。

在此處輸入圖片說明 在此處輸入圖片說明

暫無
暫無

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

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