我意识到, OAuth规范不指定有关ConsumerKey,ConsumerSecret,的accessToken,RequestToken,TokenSecret,或验证代码的来源,任何事情,但我很好奇,如果有创造显著安全令牌的最佳做法(特别是令牌/秘密组合)。
在我看来,有几个方法来创建令牌:
- 只要使用与消费者/用户相关的随机字节,存放于DB
- 哈希一些用户/用户特定的数据,存放于DB与消费者/用户关联
- 加密用户/消费者特定数据
优点:(1)是数据库是这似乎是最安全的信息的唯一来源。 这将是很难运行针对比攻击(2)或(3)。
散列真实数据(2)将允许重新生成令牌从大概已经知道的数据。 可能没有真正提供(1)由于需要存储/查找反正任何优势。 更多的CPU密集型比(1)。
加密实际数据(3)将允许解密知道的信息。 这将需要更少的存储&比查找潜在更少的(1)及(2),但是潜在的安全性较低为好。
是否有任何其他的方法/优点/应该考虑的缺点是什么?
编辑:另一个考虑是,必须有某种在令牌随机值的,因为必须存在到期,补发新的令牌,因此不能只由真实数据的能力。
遵循问题 :
是否有最低令牌长度,使显著加密安全? 据我了解,长令牌秘密会创造更安全的签名。 这是理解是否正确?
是否有使用过另一种特定的编码从哈希角度优势? 举例来说,我看到很多使用十六进制编码(例如GUID字符串)的API。 在OAuth签名算法,该令牌作为字符串。 用十六进制字符串,可用字符集是不是与Base64编码说小得多(更可预测)。 在我看来,对于长度相等的两个字符串,将一个具有较大的字符集将有一个更好/更广泛的散列分布。 这在我看来,这将提高安全性。 这是假设是正确的?
OAuth规范中提出了这个问题非常秘密的11.10熵 。