【问题标题】:What's so secret about the OAuth secret?OAuth 秘密有什么秘密?
【发布时间】:2017-03-22 04:24:46
【问题描述】:

我正在编写一个使用 OAuth2 进行授权的 Web 服务。我正在使用 C# 和 WCF,尽管这与我的问题并不相关。以前从未使用过 OAuth,我一直在做研究。我正在“验证他们实际上是否有权使用此服务”结束。我想我现在对 OAuth2 的工作原理有了一个很好的了解,但它的一个方面仍然让我感到困惑。

OAuth2 是基于令牌的。令牌只是文本,包含一些信息,包括只有您的应用程序(在我的情况下是 Web 服务)和授权服务器知道的“秘密”。秘密可以只是一个文本短语或一大串半随机字符(有点像 GUID)。这“证明”用户联系了授权服务器并从中获得了秘密。让我感到困惑的是,这似乎只是证明用户在过去某个时候联系了授权服务器。事实上,它甚至不能证明这一点。它只是证明用户知道这个秘密。令牌的其余部分(例如角色、持续时间、其他内容)都可以伪造。一旦用户获得了他想要访问的服务的一个令牌,他们就可以随心所欲地用伪造的信息制造新的令牌。事实上,可能有许多服务器设置了数千个“秘密”,供不法分子随意使用。当然,这种情况不会经常发生,但似乎很有可能。

我是对的,还是我遗漏了什么?这是 OAuth2 的已知弱点吗?

【问题讨论】:

    标签: oauth oauth-2.0


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我读过的所有资源都没有谈到签名(使用私钥创建)或联系 AS 进行验证。我所看到的只是令牌包含一个秘密和其他信息。联系 AS 本身或检查签名很有意义,而且我以前从未遇到过这种情况真是个奇迹。我想我必须找到更好的来源。再次感谢!
    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多