我正在编写一些代码来获取 Twitter 和 Instagram 提要。在我编写任何代码之前,我一直希望对 oAuth 有一个很好的了解,因为我有一种烦人的感觉,即它并不是那么安全,而且大多数时候,例如在访问公共推文时,它是不必要的麻烦。我开始阅读oAuth 2 规范以获得更好的理解,但我仍在其中。我有很多问题。
让我们以 Twitter 为例。用户访问您的网站。您将它们重定向到 Twitter 以进行身份验证并获取 authorization_grant 代码。我知道这部分是安全的,因为用户身份验证和重定向到您的网站将通过 ssl 进行。Twitter 支持 SSL 就足够了,还是您的网站也必须支持 SSL 才能确保重定向安全?您不希望授权码被不安全地传输,对吧?
现在您有了您的授权代码,您的站点将向 Twitter 发送请求以获取访问令牌。发出此请求时,您的站点将发送授权代码、您的客户端 ID 和客户端密码。我再次猜测通信是安全的,因为这将通过 ssl 发生。但是,如果站点在其 HTML 或 Javascript 中的某处包含客户端 ID 和机密,尤其是如果它是一个没有服务器端代码的静态站点,该怎么办?重定向 url 是否应该始终由服务器端代码处理,并且服务器端代码应该在不通过 HTML 或 Javascript 的情况下请求访问令牌?
获得访问令牌后,您将在请求中包含它以获取用户的推文、代表他们发布推文等。同样,如果相关站点在其 HTML 或 JavaScript 中包含访问令牌以及客户端 ID和秘密,那会很不安全,对吧?
似乎 oAuth 的所有安全性都源于 ssl 和客户端对其客户端保密的能力。我的这个结论是对的吗?
另一件事 - 在该过程的第一步中,当客户端将用户重定向到 Twitter 以进行身份验证并获取授权代码时,他们可以发送其客户端 ID 和机密并直接获取访问令牌,而不是对其进行第二次请求. 我认为这就是规范中隐式方法的含义。那么,为什么在规范中添加了发送第二个请求以获取访问令牌的额外步骤?它会增加安全性吗?