作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
OAuth 2 token 只是随机的 blob。我已经看到 OAuth 服务器的实现似乎建议将这个随机字符串直接存储在数据库中并进行查找。
这违背了我更好的判断。
token 本质上是用户的另一个密码。将这些 token 以纯文本形式存储在数据库中 - 尽管这些密码是随机生成的 - 似乎是一个坏主意。这是因为如果数据库遭到破坏,那么攻击者所要做的就是传递 auth_token=code
并模拟任何拥有有效 token 的用户。
为 OAuth 2 生成和存储授权 token 的最佳方法是什么?
最佳答案
喜欢拥有一个易于撤销的不透明 token 的想法。但我想保留 O(1) 查找时间。
假设一个键查找是 O(1),我认为下面的方案应该可行。
Client Auth Code Issued = Url64(ENC(random_index||secretkey) || HMAC)
Database Record = {KEY: random_index , VALUE: scrypt(secretkey)}
解释:
发行
random_index
和 secret_key
secret_key
进行哈希处理,并将其存储在数据库中的 random_index
下。random_index
和 secret_key
并将其作为 auth_code
提供给客户端验证
auth_code
解密为random_index
和secret_key
组件random_index
查找tokensecret_key
。我认为以上解决了问题,但我欢迎任何其他解决方案。
注意:我会将其他元数据与 key (过期、权限等)一起存储,但这对回答问题并不重要。
注意 2:我也可以使用 SHA2 或其他快速哈希算法而不是 scrypt
或 bcrypt
,因为我控制了熵在 secret_key
中。
关于oauth-2.0 - 作为 OAuth 服务器,我应该如何生成和存储 OAuth 2.0 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15072754/
我是一名优秀的程序员,十分优秀!