使用OWIN / OAuth2,调用GET可防止Windows身份通过后续POST到达令牌端点

时间:2013-11-22 18:59:53

标签: authentication oauth owin katana

在看似基本的情况下,在受OAuth2 / OWIN保护的服务器中调用GET方法会阻止服务器在后续POSTS上接收到/ token端点的Windows标识。我做错了什么?

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

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

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

  1. 客户端POSTS到我的/令牌端点获取令牌。
  2. 客户端的Windows标识在GrantClientCredentials方法的上下文参数(具体为context.Request.User)中到达服务器。我可以使用context.Validated(id)给他一个合适的令牌,其中id是适合他的凭据的ClaimsIdentity
  3. 让我们说客户再次POSTS再次获得另一个令牌。同样,他的凭据来到context.Request.User的服务器。一切都很好。
  4. 客户端对我的API端点执行GET,包括令牌。
  5. 服务器可以检查令牌中的声明。一切都还不错。
  6. 相同的客户端或不同的客户端POST以获取另一个令牌。
  7. 这次,context.Request.User以null结尾。的问题!
  8. 如果我重新启动服务器,一切都设置正确。重新启动浏览器没有帮助。
  9. 无论是使用IIS Express还是真正的IIS运行,都会出现这些症状。

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

    FWIW,我还没有编写任何与client_id或“秘密”有关的内容。还在努力搞清楚那部分。如果这是问题所在,我将非常感谢如何发布client_id和秘密。

0 个答案:

没有答案