我正在寫一些代碼來獲取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和密碼,直接獲取訪問令牌,而不是直接第二次請求它。我認爲這是他們在規範中隱含的方法所表達的含義。 那麼,爲什麼在規範中添加第二個獲取訪問令牌的請求呢?它增加了安全性嗎?