OAuth 2中的访问令牌撤销实施

时间:2014-03-28 08:52:56

标签: web-services rest oauth owin katana

我使用OWIN OAuth 2来实现我的授权服务器提供程序。现在,我想实现令牌撤销(当我的客户端应用程序想要注销时) 任何人都可以帮助我并告诉如何在OWIN KATANA OAuth中实施令牌撤销2.是否有一些良好的做法?

3 个答案:

答案 0 :(得分:17)

OAuth 2.0中涉及两种令牌。一个是访问令牌,另一个是刷新令牌。

对于刷新令牌,我真的推荐由Taiseer Joudeh撰写的Token Based Authentication using ASP.NET Web API 2, Owin, and Identity。他提供了有关设置基于令牌的身份验证的分步教程,包括撤消刷新令牌。

对于访问令牌,我使用黑名单来存储已撤销的访问令牌。当用户登出时,我将用户的当前访问令牌添加到黑名单中。如果有新请求,我首先检查其访问令牌是否在黑名单中。如果是,请拒绝该请求,否则让OAuth组件进行验证。

以下是一些实施细节:

我使用缓存作为黑名单,并将缓存项目的到期时间设置为访问令牌的到期时间。缓存项(访问令牌)将在到期后自动从黑名单中删除。 (我们不需要在访问令牌到期后将其保留在黑名单中。如果令牌过期,无论是否在黑名单中,它都无法通过OAuth验证机构)。

以下代码显示了如果请求的访问令牌位于黑名单中,如何拒绝该请求。

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
    {
        Provider = new OAuthBearerAuthenticationProvider()
            {
                OnRequestToken = context =>
                   {
                        if(blackList.contans(context.Token))
                        {
                            context.Token = string.Empty;
                        }

                        return Task.FromResult<object>(null);
                    }
            }
    }

我所做的是如果我在黑名单中找到访问令牌,我将访问令牌设置为空字符串。稍后,当OAuth组件尝试解析令牌时,它会发现令牌为空。当然,空字符串不是有效令牌,因此它会拒绝请求,就像您发送带有无效访问令牌的请求一样。

答案 1 :(得分:2)

根据OAuth 20 RFC,刷新令牌不用于撤销令牌 - 刷新“访问令牌可能具有比资源所有者授权的更短的生命周期和更少的权限”。刷新令牌用于增加访问令牌的生命周期,或使用将在稍后过期的新访问令牌续订旧访问令牌。这通常用于防止再次询问用户他/她的凭据。为了撤销令牌,OAuth20提供程序应该公开这样的WS /端点或其他一些机制。

答案 2 :(得分:0)

刷新令牌是OAuth2允许授权撤销的方式。微软的OAuth2授权服务器中间件在这方面缺乏:

http://leastprivilege.com/2014/03/24/the-web-api-v2-oauth2-authorization-server-middlewareis-it-worth-it/