2013-07-02 72 views
0

我正在寫一些代碼來獲取Twitter和Instagram的飼料。在我編寫任何代碼之前,我一直希望對oAuth有一個很好的理解,因爲我有這種嘮叨的感覺,它並不是那麼安全,而且大多數時候,比如在訪問公共推文時,這是一種不必要的無用函數。我開始閱讀oAuth 2 specification以獲得更好的理解,我仍然處於中間。我有很多問題。OAuth - 它如何安全?

讓我們以Twitter爲例。 用戶訪問您的網站。您將它們重定向到Twitter以進行身份​​驗證並獲取authorization_grant代碼。 我知道這部分是安全的,因爲用戶身份驗證和重定向到您的網站將通過SSL發生。 Twitter是否足以支持SSL,或者您的網站是否也必須支持SSL才能使重定向安全?您不希望授權代碼不安全地傳輸,對吧?

既然您有了授權授權代碼,您的網站就會向Twitter發送請求以獲取訪問令牌。當提出此請求時,您的網站將發送authorization_grant代碼,您的客戶端ID和客戶端密鑰。我再次猜測通信是安全的,因爲這將發生在ssl上。但是如果網站在其HTML或Javascript中包含了客戶端ID和密碼,特別是如果它是一個沒有服務器端代碼的靜態網站呢? 重定向url是否應該始終由服務器端代碼處理,並且服務器端代碼應該使訪問令牌的請求不經過HTML或Javascript?

一旦你有了訪問令牌,你就會將它包含在你的請求中,以獲得用戶的推文,代表他們發佈推文等。同樣,如果有問題的網站要將訪問令牌包含在HTML或JavaScript中與客戶端ID和祕密,這將是非常不安全的,對吧?

oAuth的所有安全性似乎源於ssl和客戶端保留其客戶機密的能力。這個結論我是否正確?

另一件事 - 在流程的第一步中,當客戶端將用戶重定向到Twitter以認證並獲取authorization_grant代碼時,他們可以發送他們的客戶端ID和密碼,直接獲取訪問令牌,而不是直接第二次請求它。我認爲這是他們在規範中隱含的方法所表達的含義。 那麼,爲什麼在規範中添加第二個獲取訪問令牌的請求呢?它增加了安全性嗎?

回答

1

我不知道Twitter的API,我對於談話stackexchange API https://api.stackexchange.com/docs/authentication

我又猜通信是安全的,因爲這會發生 通過SSL。但是如果該網站在其HTML或Javascript中包含了客戶端ID和祕密 ,特別是如果它是一個靜態網站 而沒有服務器端代碼呢?

client_secret僅在明確流動的情況下發送。顯式流應由服務器端應用程序使用,並應小心保持client_secret的安全。

那麼,爲什麼發送第二個請求獲得 訪問令牌的額外步驟?

好,流量比明確流的安全性較低,因爲訪問托克被髮送到用戶代理。但是在隱式流的情況下會有一個屬性到期,除非您已指定範圍否表達式,否則將會過期。同時服務器端的流量可以由被registerd

的應用程序只用它看起來的OAuth的所有安全與SSL和客戶端的 保持自己的客戶端祕密的祕密的能力造成的。我在這 的結論是正確的嗎?

再次client_secret將在服務器端流程中可用。但是,是的,客戶端應該注意access_token沒有給出

看看這個link。它給出了行爲中的一個可能的漏洞的例子。