2015-04-24 51 views
1

我有一個關於OAuth2的問題並驗證了令牌已分配給的客戶端。OAuth2令牌驗證和機密客戶端

該規範指出,對於機密客戶端,客戶端在請求令牌等時必須進行身份驗證,例如使用基本身份驗證標頭。這意味着我們可以驗證客戶端已經註冊並且可以授予訪問令牌。一個令牌請求的頭部可能看起來像下面這樣:

POST /token HTTP/1.1 
    Host: server.example.com 
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW 
    Content-Type: application/x-www-form-urlencoded 

該規範還指出,一旦令牌已分配,客戶端可以使用令牌通過將其在AUTH頭以請求的信息,如下:

GET /resource/1 HTTP/1.1 
Host: example.com 
Authorization: Bearer mF_9.B5f-4.1JqM 

這是正常的,但說我們有一個或多個客戶端應用(讓我們稱之爲應用1和應用2),我們的服務器,我們已經分別獲得訪問權,通過TOKEN1和Token2,我們怎麼能請確保包含在auth頭部中發送的不記名令牌的請求來自我們分配給它的客戶端應用程序。

不能App2(以某種方式)獲得給予App1的令牌(惡意或其他),只是通過將它傳遞給auth頭部而不是它自己的令牌來獲取對資源的訪問權限?

我們應該發送兩個auth頭文件給我們對資源的請求,一個使用我們的不記名令牌,另一個使用我們的客戶端憑證,因此服務器可以驗證令牌是否來自正確的客戶端?

+0

如果攻擊者獲得OAuth載體令牌,那麼服務器無法知道它未被您的應用發送;這就是爲什麼SSL是強制性的(爲了安全地傳輸令牌),爲什麼令牌應該是短暫的(所以泄漏的令牌在攻擊者可以使用的時間有限)以及爲什麼它們被髮送到頭部(而不是查詢字符串他們會被記錄)。 – Graham

回答

1

簡短的回答:那今天是不可能以標準化的方式。

今天的OAuth 2.0規範定義了不具有您正在尋找的屬性的承載令牌,因爲呈現它們的客戶將獲得對資源的訪問權限,而無需證明它們是該令牌的合法所有者。令牌僅用於機密(TLS)通道,因此它們不會以錯誤的客戶端爲結果。

OAuth 2.0工作組正在進行工作以定義OAuth 2.0的所謂「持有證明」擴展,這將允許客戶端對請求進行簽名,以便接收方可以驗證它是否是正確的客戶端。另請參閱:http://www.thread-safe.com/2014/04/oauth-proof-of-possession-drafts.html

OAuth 2.0規範的當前迭代使用承載令牌保持儘可能簡單,只是爲了使編寫客戶端實現變得非常簡單。如果你同時控制客戶端和資源服務器,你可以拿出你自己的定製機制來處理擁有證明,但目前沒有標準的方法來做這件事。

+0

非常感謝 –