web-services - OAuth 2中的访问 token 吊销实现

标签 web-services rest oauth owin katana

我已经使用OWIN OAuth 2来实现我的授权服务器提供程序。现在,我想实现 token 吊销(当我的客户端应用程序要注销时)。
谁能帮助我,告诉我如何在OWIN KATANA OAuth 2中实现 token 吊销。是否有一些好的做法?

最佳答案

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

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

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

以下是一些实现细节:

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

以下代码显示了如果访问 token 在黑名单中,则如何拒绝该请求。

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

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

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

关于web-services - OAuth 2中的访问 token 吊销实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22708046/

相关文章:

php - 我应该使用什么范围(google login with hybridauth/oauth)

javascript - 使用 JavaScript 的 Google OAuth2 刷新 token

sql-server - 在SSRS中自动设置用户的订阅

c# - .net 2.0 Web 服务是否始终使用 Soap over http?

python - RESTful Python WSGI 网络框架

c# - 使用 Swagger.NET,如何详细描述返回值?

javascript - 谷歌 API "Permission denied to generate login hint for target domain"

java - NoClassDefinitionFound : javax. xml.ws.Service

java - 即使存在也无法找到具有 id 的实体

web-services - 针对多个请求的高效密码散列