我最近一直在研究OAuth服务器的实现。我注意到的一件事是所有服务器实现都不加密服务器端的客户端密钥。我知道它不应该是一个密码,但它被用作密码。如果是这样的话,我们为什么不加密呢?
我唯一能想到的是它无法加密,因为OAuth服务器应该在UI上向客户端显示客户机密钥。
P.S:它属于stackoverflow还是serverfault ..?
答案 0 :(得分:5)
这是一个实施决定,但只要授权服务器没有使用HSM作为加密密钥,用另一个密钥加密秘密就没有多大意义。它驻留在同一个文件系统上。
在GUI中显示它绝对不是不加密它的原因(因为服务器可以在显示它之前对其进行解密),甚至不需要在UI中显示它(可以由应用程序开发人员提供输入) )。
但也许您指的是单向哈希?在这种情况下,我同意授权服务器应该将这些客户机密码视为密码并对其进行哈希处理,或者至少提供这样做的选项。
但值得一提的是,客户机密在丢失时可被视为危害较小,因为它们对于客户/ AS关系是唯一的。暴露用户密码的不好的一面是它们通常可以用于其他服务提供商(使用相同的用户名/电子邮件地址)。这并不适用于客户机密,有人可能会争辩说,在很多情况下(RS和AS是"关闭")能够访问客户端机密所在的后端已经过时了,需要学习客户秘密本身。