Asp.net

.Net Core Cookie 身份驗證在 IIS 中託管時不起作用

  • December 16, 2016

獨立執行應用程序時(在我的情況下,只是在指定埠上執行的紅隼伺服器:3001),我可以登錄(創建身份驗證 cookie)並毫無問題地使用我的會話來對我的 API 控制器進行後續呼叫。但是,一旦我通過 IIS 將應用程序發佈到主機,我就可以毫無問題地登錄,但是對我的 API 控制器的所有後續請求都無法授權並重定向到登錄。

為了展示我的問題,我將我的應用程序剝離為一個工作範例,可以在此處找到:Angular2AspNetCoreStarter

重現:

  1. 複製回購
  2. 導航到項目目錄cd Angular2AspNetCoreStarter
  3. 安裝依賴項dotnet restore&npm install
  4. 建造npm run build
  5. 發布dotnet publish
  6. 通過 IIS發佈到 IIS 的主機
  7. 導航到託管站點(在我的情況下是 @ http://localhost/ng2starter
  8. 使用任何使用者名/密碼登錄
  9. 打開側邊導航
  10. 點擊發送匿名 Ping(注意它有效!我使用Fiddler來檢查流量)
  11. 點擊發送 Ping(注意 401 並重定向到登錄)

我檢查了日誌,在紅隼日誌中發現的錯誤是: CookieAuth was not authenticated. Failure message: Unprotect ticket failed

僅供參考 ‘CookieAuth’ 是我在 appsettings.json 文件中定義的方案名稱。

我認為問題可能是來自具有相同 cookie 名稱的不同“localhost”應用程序的遺留或重疊 cookie。我在 IIS 中執行了您的範例,並且從 ping 中得到了相同的 401 錯誤,然後在 chrome 中註意到一堆具有相同預設名稱的 localhost cookie

.AspNetCore.CookieAuth

我清除了所有的 cookie,然後再次執行你的樣本並得到一個“PONG”

使用 IISEXPRESS localhost:PORT 時創建的 cookie

當您僅使用 localhost 在 IIS 中執行時也會下降,所以我的猜測是 IISEXPRESS cookie 被發送到 IIS 實例,並且由於您具有臨時數據保護,它們將無法解密。

引用自:https://stackoverflow.com/questions/41171833