如何坚持OAuth 2刷新令牌
找不到关于实现OAuth 2刷新令牌持久性的最佳方式的任何准则以及关于实际应该存储什么以及如何存储的常见意见。
尽管Taiseer Joudeh在ASP.NET Web API中提供了一个非常好的OAuth授权。 这是来自文章的RefreshTokens表格:
其中: Id - 唯一令牌标识符的哈希, 主题 - 用户名, ClientId - 应用程序标识符, ProtectedTicket - 序列化访问令牌。
我想在SO社区的帮助下证明或颠覆一些做出的决定。 所以这是我的担忧:
为什么我们应该坚持短命的access_token ? 到目前为止,我可以再次想到这个方法的两个理由。 首先 ,当你在任何地方保持用户的访问节点时,可能会造成安全威胁,只是等待某人抓住它们,然后再用于不可靠的资源服务器(请记住,它们应该使用相同的算法来对密钥进行串行化/反序列化)。 其次 ,一旦决定更改序列化算法的任何部分,您将不得不关心更新这些持久性票证。 那么,为什么不在我们验证client_id
和refresh_token
而不是从数据库中读取和反序列化的情况下在运行时创建新票据呢?
如何加密access_token ,如果要坚持下去呢? 序列票上的salt + SHA2会做这项工作还是有更好的方法?
为什么要刷新refresh_token ID ? 它实际上保护什么类型的攻击? 如果我们在数据库中保存真正的密钥的同时将散列密钥发送为refresh_token
,那么它会更安全吗? 这样,对refresh_token(随机用户的猜测刷新标记)的暴力攻击也必须猜测散列算法。
我会尽力澄清这些问题:
1&2 - 如果您在此查看context.SerializeTicket
的源代码,您会注意到,此受保护票据使用依赖于服务器machineKey进行加密的默认DPAPI进行加密。 所以如果你从数据库中抓取它,除非你有machineKey,否则你不能对它做任何事情。
3 - 如果您的DBA有权访问此表,并且他可以看到纯刷新标记标识符,则可以使用这些刷新标记标识使用grant_type(refresh_token)简单地获取新的访问标记,
链接地址: http://www.djcxy.com/p/8413.html