【发布时间】:2017-03-22 04:24:46
【问题描述】:
我正在编写一个使用 OAuth2 进行授权的 Web 服务。我正在使用 C# 和 WCF,尽管这与我的问题并不相关。以前从未使用过 OAuth,我一直在做研究。我正在“验证他们实际上是否有权使用此服务”结束。我想我现在对 OAuth2 的工作原理有了一个很好的了解,但它的一个方面仍然让我感到困惑。
OAuth2 是基于令牌的。令牌只是文本,包含一些信息,包括只有您的应用程序(在我的情况下是 Web 服务)和授权服务器知道的“秘密”。秘密可以只是一个文本短语或一大串半随机字符(有点像 GUID)。这“证明”用户联系了授权服务器并从中获得了秘密。让我感到困惑的是,这似乎只是证明用户在过去某个时候联系了授权服务器。事实上,它甚至不能证明这一点。它只是证明用户知道这个秘密。令牌的其余部分(例如角色、持续时间、其他内容)都可以伪造。一旦用户获得了他想要访问的服务的一个令牌,他们就可以随心所欲地用伪造的信息制造新的令牌。事实上,可能有许多服务器设置了数千个“秘密”,供不法分子随意使用。当然,这种情况不会经常发生,但似乎很有可能。
我是对的,还是我遗漏了什么?这是 OAuth2 的已知弱点吗?
【问题讨论】: