我已经使用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/