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

我使用OWIN OAuth 2来实现我的Authorization Server Provider。 现在,我想实现令牌撤销(当我的客户端应用程序想要注销时)。
任何人都可以帮助我,告诉如何在OWIN KATANA OAuth 2中实现令牌撤销。是否有一些好的做法?


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

对于刷新令牌,我真的推荐使用由Taiseer Joudeh编写的ASP.NET Web API 2,Owin和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组件试图解析令牌时,它会发现令牌为空。 当然,一个空字符串不是一个有效的标记,所以它会拒绝请求,就像你用一个无效的访问标记发送一个请求一样。


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


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

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

链接地址: http://www.djcxy.com/p/8401.html

上一篇: Access token revocation implementation in OAuth 2

下一篇: JSON serialization of enum as string