在看似基本的场景中,在受OAuth2 / OWIN保护的服务器中调用GET方法可防止服务器在后续POSTS上接收到/ token endpoints 的Windows标识 . 我究竟做错了什么?

这是一个Web API服务,包括嵌入式OAuth2授权服务器和Microsoft的OWIN管道 .

授权服务器提供程序继承自 OAuthAuthorizationServerProvider ,并安装在我的 Startup 类中 . 它会覆盖 GrantResourceOwnerCredentials (用于用户名/密码身份验证)和 GrantClientCredentials (用于client_credentials grant_type) .

这是问题所在 . 如果我为Windows身份验证配置服务,则会发生以下情况 .

  • 客户端POSTS到我的/令牌 endpoints 获取令牌 .

  • 客户端的Windows标识在 GrantClientCredentials 方法的上下文参数(具体地, context.Request.User )中到达服务器 . 我可以使用 context.Validated(id) 给他一个合适的令牌,其中id是适合他的凭证的 ClaimsIdentity .

  • 让我们说客户甚至再次发送POSTS以获得另一个令牌 . 同样,他的凭据在 context.Request.User 中发送到服务器 . 一切都很好 .

  • 客户端对我的API endpoints 执行GET,包括令牌 .

  • 服务器可以检查令牌中的声明 . 一切都还不错 .

  • 相同的客户端或不同的客户端POST以获取另一个令牌 .

  • 这次, context.Request.User 到达为空 . PROBLEM!!!

  • 如果我重新启动服务器,一切都设置正确 . 重新启动浏览器没有帮助 .

无论是使用IIS Express还是真正的IIS运行,都会出现这些症状

该问题仅适用于Windows身份验证 . 打开匿名身份验证并通过用户名/密码duo后,凭据将在步骤7中安全到达 .

FWIW,我还没有编写任何与 client_id 或"secret"有关的内容 . 还在努力搞清楚那部分 . 如果's the problem, I'欣赏如何发布client_id和secret的帮助 .