我有一個關於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頭文件給我們對資源的請求,一個使用我們的不記名令牌,另一個使用我們的客戶端憑證,因此服務器可以驗證令牌是否來自正確的客戶端?
如果攻擊者獲得OAuth載體令牌,那麼服務器無法知道它未被您的應用發送;這就是爲什麼SSL是強制性的(爲了安全地傳輸令牌),爲什麼令牌應該是短暫的(所以泄漏的令牌在攻擊者可以使用的時間有限)以及爲什麼它們被髮送到頭部(而不是查詢字符串他們會被記錄)。 – Graham