关于OAuth秘密的秘密是什么?

时间:2017-03-21 15:22:08

标签: oauth oauth-2.0

我正在编写一个使用OAuth2进行授权的Web服务。我正在使用C#和WCF,尽管这与我的问题并不相关。从来没有使用OAuth,我一直在做我的研究。我正在“验证他们实际上已经授权使用这项服务”的结尾。我想我对OAuth2现在如何运作有了很好的了解,但它的一个方面仍然让我感到困惑。

OAuth2是基于令牌的。令牌只是文本并包含一些信息,包括只有您的应用程序(在我的情况下是Web服务)和授权服务器知道的“秘密”。秘密可以只是一个文本短语或一大串半随机字符(有点像GUID)。这“证明”用户联系了授权服务器并从中获取了秘密。令我困惑的是,这似乎只是证明用户过去曾经联系过授权服务器。事实上,它甚至没有证明这一点。它只是证明用户知道这个秘密。令牌的其余部分(例如角色,持续时间,其他东西)都可以伪造。一旦用户获得了他想要访问的服务的一个令牌,他们就可以根据自己的喜好用伪造的信息掀起新的令牌。事实上,可能会有许多服务器设置有成千上万的“秘密”供恶意的人随意使用。当然,这不会经常发生,但似乎很有可能。

我是否正确,或者有什么我想念的?这是OAuth2的已知弱点吗?

1 个答案:

答案 0 :(得分:1)

每当资源服务器(或“服务”)收到令牌时,它都需要验证它。根据令牌类型,它可以检查使用Authorization Server具有的私钥创建的签名,也可以调用授权服务器来验证令牌。这样,用户就无法伪造令牌:伪造签名或使授权服务器验证它没有发出的令牌是不可能的。

FWIW:您似乎正在混淆“令牌”和“客户端密钥”,甚至可能是授权服务器的私钥;他们都是不同的概念。