Asp.net
.Net Core Cookie 身份驗證在 IIS 中託管時不起作用
獨立執行應用程序時(在我的情況下,只是在指定埠上執行的紅隼伺服器:3001),我可以登錄(創建身份驗證 cookie)並毫無問題地使用我的會話來對我的 API 控制器進行後續呼叫。但是,一旦我通過 IIS 將應用程序發佈到主機,我就可以毫無問題地登錄,但是對我的 API 控制器的所有後續請求都無法授權並重定向到登錄。
為了展示我的問題,我將我的應用程序剝離為一個工作範例,可以在此處找到:Angular2AspNetCoreStarter
重現:
- 複製回購
- 導航到項目目錄
cd Angular2AspNetCoreStarter- 安裝依賴項
dotnet restore&npm install- 建造
npm run build- 發布
dotnet publish- 通過 IIS發佈到 IIS 的主機
- 導航到託管站點(在我的情況下是 @
http://localhost/ng2starter)- 使用任何使用者名/密碼登錄
- 打開側邊導航
- 點擊發送匿名 Ping(注意它有效!我使用Fiddler來檢查流量)
- 點擊發送 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 實例,並且由於您具有臨時數據保護,它們將無法解密。