2014-03-27 38 views
1

我一直在嘗試瞭解OAuth一段時間,並且仍然留有一些關於工作流的問題和處理使用值的建議。我正在爲學習目的開發一個PHP三段式OAuth 1.0a項目。我將要介紹的步驟在這裏描述; http://wiki.oauth.net/w/page/12238555/Signed%20Callback%20URLsPHP中的工作流OAuth 1.0a

  1. 爲什麼在第5步中會返回一個令牌?我認爲令牌與消費者已經知道,就像token_secret一樣。所以它用作消費者發送數據的標識符?或者我誤以爲發送的令牌與步驟2中發送的請求令牌相同?

  2. 回調網址在此列爲可選,但在其他規範中則視爲需要。我正在考慮讓人們將他們的回調URL存儲在服務提供商的數據庫中,因爲它不會經常更改或根本不會更改,因此不會在步驟1中將其發送並在步驟5中從數據庫中檢索。

  3. 由於RSA哈希方法由於速度和可能的泄漏而不鼓勵,所以每個人都決定採用HMAC方法。那麼我們需要在步驟1和6中發送散列方法嗎?而且,我看到很少有提供其他方法的服務提供商。

  4. 使用mt_rand()進行散列並不安全,所以我在考慮使用openssl_random_pseudo_bytes(),它是否安全作爲散列hash_hmac()的關鍵?

  5. 我經常看到sha1用於請求和訪問令牌和secret_tokens。是不是更長的哈希像sha256或sha512更安全?如果安全性得到延伸,存儲空間不會成爲問題,對吧?

回答

1
  1. 即使令牌是已知的消費者,你必須知道哪個OAuth的會議返回的用戶正在操作。在這一步中,令牌用作會話標識符。否則,您會如何知道返回的用戶是誰(除非您自己在回調中提供會話標識符)。

  2. 我建議你遵守規範。由於如果您充當服務提供商,則您無法控制消費者,因此您對回調要求一無所知。如果它是動態的(例如,包含像1中的會話標識符),則存儲回調會出現問題。

  3. 再次。堅持規範。雖然它不是寫成石頭的,但很多聰明的人一直在研究它,並且對規範的變化的影響深思熟慮。由於可能無法控制這兩個域(服務提供商和消費者),因此您必須就認證方法達成一致。如果域名不知道該方法,域名將如何知道如何解釋密碼?如果目前的方法被認爲是不安全的呢?你如何知道一方是否改變了方法?

  4. 該函數應該是密碼安全的。你可以使用它。

  5. 當然,你可以使用更強大的散列。你可能應該。確保兩個域都瞭解該方法。見http://oauth.net/core/1.0/#anchor45