我正在一个概念验证应用程序中实现OAuth2授权代码流 - 所以纯ASP.NET MVC,不使用DotNetOpenAuth或任何其他auth框架 - 我正在摸索如何处理撤销.
我的实现是这样的:
好的,这里的规范在推荐的实现上有点模糊,我认为这归结为当用户撤销授权时会发生什么.
选项1:
刷新令牌是一个包含用户ID,客户端ID和范围的自包含加密字符串.它不存储在任何地方.当访问令牌到期时,客户端向我发送刷新令牌.我解密了这个,并检查我是否仍然在该文件中为该用户/客户端/范围组合提供了有效的授权记录.如果我这样做,我会向他们发送一个新的访问令牌.如果没有,我会返回
invalid_grant错误.在这种情况下,撤消授权意味着将我的数据库中的授权记录标记为已撤销(或仅将其完全删除).没有授权记录 - >刷新令牌将无效 - > FooApp无法再访问数据.
选项2:
我将刷新令牌与client_id,用户ID和该令牌中授权的作用域一起存储在我的数据库中.当我收到刷新令牌的请求时,我找到了refresh_token记录,检查它是否已被撤销等.
在这种情况下,"撤销授权"将通过将我的数据库中的刷新令牌标记为已撤销或通过删除来实现.
另外 - 在这种情况下,一旦交换了令牌,我就看不出有任何理由将授权保留在文件中.如果用户希望知道哪些应用程序可以访问其MyServer数据,那么我只需查询数据库中所有未撤销的刷新令牌和相关范围.
据我所知,任一选项都将满足OAuth2规范的要求,同时允许用户查看和撤销其MyServer帐户上当前活动的所有授权.一个限制是选项1不允许将多个单独的OAuth2令牌集发布到同一用户的同一客户端应用程序 - 但我想不出您想要执行此操作的任何场景.
你会推荐什么?加密令牌和存储授权?使用后删除授权,并存储刷新令牌?还是真的没关系?
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |