2016-03-01 159 views
0

我正在使用Microsoft.Owin.Security.Oauth在Web API上实现OAuth 2。Microsoft.Owin.Security.Oauth承载令牌授权拦截

我想保持不记名记号小,并保留私人数据。为此,我想在其中存储会话ID,然后在收到并处理会话ID后以编程方式填写ClaimsIdentity。这也会给我更大的灵活性,涉及如何注销,角色更改和其他事情。

这应该是拦截正确事件并添加委托的问题。但是,我找不到在我的授权提供商("OAuthAuthorizationServerProvider"的子类)上触发的事件。我认为"AuthorizeEndpoint"会这样做,但它不会被用[Authorize]属性修饰的API方法解雇,即使这些方法显然会检查有效的不记名令牌。当我覆盖"MatchEndpoint"时,我发现的一个方法是用[Authorize]装饰的方法调用"IsAuthorizeEndpoint""IsTokenEndpoint"都设置为false。后者对我有意义,前者不。

我很困惑。知道这个图书馆的人可以告诉我发生了什么事情吗?我需要做些什么来完成这个看起来很简单的想法?

+1

看起来可能类似于http://stackoverflow.com/questions/21675844/adding-extra-details-to-a-webapi-bearer-token ?? – Macilquham

回答

0

我想你可能会将使用AuthorizeAttribute标记的资源与OWIN授权端点混为一谈。 AuthorizeEndpoint和TokenEndpoint在OWIN配置中设置为它们各自的认证类型的接收者。 Authorize Endpoint用于基于Web的用户代理身份验证,并且您希望浏览器在未经授权访问资源时被重定向。令牌端点被用于用户名密码令牌认证和刷新,而且是您想要的。假设您在OWIN启动配置中分配了这两种情况,那么您可能希望为OnValidateTokenRequest重载该事件,以确保您的令牌定制不会导致客户端尝试再次使用它时无效。您需要在OnTokenEndpoint事件中对令牌进行实际修改。