.Net核心Cookie身份验证在IIS中托管时不起作用

wic*_*nja 6 asp.net iis .net-core angular

当独立运行应用程序时(在我的情况下只运行在指定端口上运行的kestrel服务器:3001)我可以登录(创建一个auth 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
FYI'CookieAuth'是我在appsettings.json文件中定义的方案名称.

Sha*_*lle 12

我认为问题可能会遗留或重叠来自具有相同cookie名称的不同"localhost"应用程序的cookie.我在IIS中运行您的示例并从ping中获得相同的401错误,然后在chrome中注意到一堆localhost cookie具有相同的默认名称

.AspNetCore.CookieAuth

我清理了所有的饼干然后再次运行你的样品并找回了"PONG"

使用IISEXPRESS localhost:PORT时创建的cookie

当您使用localhost在IIS中运行时,也会出现问题,因此我猜测IISEXPRESS cookie正被发送到IIS实例,因为您有短暂的数据保护,所以它们无法解密.

  • 非常感谢,这正是我的问题. (2认同)