1

我正在编写一些代码来获取 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 和机密并直接获取访问令牌,而不是对其进行第二次请求. 我认为这就是规范中隐式方法的含义。那么,为什么在规范中添加了发送第二个请求以获取访问令牌的额外步骤?它会增加安全性吗?

4

1 回答 1

1

I am not sure about twitter API, I am talking with respect to stackexchange API https://api.stackexchange.com/docs/authentication

Again I guess the communication is secure because this will happen over ssl. But what if the site has included the client id and secret somewhere in its HTML or Javascript, especially if it is a static site with no server side code?

client_secret is send only in the case of explicit flow. Explicit flow should be used by server side application and care should be taken to keep the client_secret safe.

So, why was this extra step of sending a second request to obtain access token added in the specification?

Well, Implicit flow is less secure than explicit flow since access toke is send to the user agent. But there is an attribute expire in the case of implicit flow which will get expired unless you have specified scope as no_expiry. Also server side flow can be used only by the apps that are registerd

It seems all the security of oAuth stems from ssl and the client's ability to keep their client secret secret. Am I right in this conclusion?

Again client_secret will be available in server side flow. But yes, client should take care that access_token is not given out

Check out this link. It gives an example of possible vulnerability in ouath.

于 2013-07-02T03:33:58.367 回答