2013-01-31 32 views
2

我想在我的PHP服務器上實現OAuth服務器,該服務器上有一個SSL連接。 PHP-codeigniter還沒有像樣的OAuth 2框架。那麼我應該使用哪一個OAuth1或OAuth2?非SSL網站的OAuth1或OAuth2?

回答

9

簡短的回答是:你應該考慮使用OAuth 1.0a的[1],而不是OAuth 2.0用戶

長的答案是下面:默認情況下

的OAuth 2.0需要運輸中使用SSL/TLS的層安全。因此,在實現符合OAuth 2.0的授權服務器時,您需要允許客戶端應用程序通過安全通道連接到授權端點以及令牌端點。參見下列部分在OAuth 2.0規範[2]:

3.1(授權端點)

「[...]發送請求時,授權服務器必須要求使用TLS如在第1.6節中描述授權端點「。

3.2(令牌端點)

「[...]作爲將請求發送到令牌端點時在第1.6節中描述的授權服務器必須要求使用TLS」。

在你的情況,當你沒有一個SSL連接,則仍然可以可能考慮使用OAuth 2.0和MAC接入認證[3],它規定了如何通過發出MAC-類型的訪問進行的OAuth 2.0請求令牌。這些令牌使用共享的對稱密鑰進行加密簽名(密鑰在客戶端應用程序和服務器之間共享)。

重要注意事項:但是,在這種設置中,您仍然需要爲客戶端提供一種機制,以便能夠以安全的方式與OAuth 2.0服務器建立共享密鑰(這是如何完成的你 - 可以通過一些SSL通道或帶外,具體取決於你的具體用例)。這是允許客戶安全訪問受保護資源的嚴格要求!

「的MAC方案需要建立客戶端和服務器之間共享的對稱密鑰 。本說明書提供一個 這樣的方法用於發出一組MAC憑證來在的形式使用 的OAuth 2.0客戶端MAC-型訪問令牌。

這種機制的主要設計目標是簡化和改善 HTTP認證對於那些不願或不能 僱用TLS爲每一個請求服務。特別地,該機構的槓桿 初始TLS設置階段,建立 客戶端之間的共享密鑰a找到服務器。這個共享密鑰然後通過一個不安全的通道被用來提供針對被動網絡的攻擊者的保護。「

基於上面的解釋,我會考慮使用OAuth 1.0a [3],它不需要使用客戶端和授權服務器之間通信的傳輸級別安全性(OAuth 1.0a使用術語「服務提供者」,btw),而是依賴於使用共享對稱密鑰(或RSA密鑰)簽名的消息。請注意,除非你用使用HMAC-SHA1或RSA-SHA1簽名(即你決定使用明文署名型),您將需要使用SSL/TLS反正。

[1] https://tools.ietf.org/html/rfc5849

[2] http://tools.ietf.org/html/rfc6749

[3] http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01

+1

什麼有關客戶端應用程序。需要SSL連接,還是僅適用於資源和授權服務器? – beku8

2

我使用OAuth2 2年,我強烈建議使用它,因爲它非常可靠。 關於SSL,據我所知,OAuth應該利用SSL來獲得正確的實現,避免這種情況不會採用OAuth協議。