2017-06-16 53 views
0

我一直在閱讀OAuth2規範,但我無法弄清楚一件事。沒有客戶端密碼(現在推薦用於單頁應用程序)的授權碼不是非常不安全的,因爲它可以輕鬆用於網絡釣魚?讓我解釋一下:OAuth2沒有客戶端密鑰 - 可能的網絡釣魚?

  1. 客戶端重定向資源所有者到授權服務器,傳遞重定向URL和客戶端ID。
  2. 資源所有者批准請求,授權服務器將他重定向到給定的重定向URL並傳遞授權碼。

現在,實際上,請求授權的客戶端是一個釣魚網站,用戶不幸意識到這一點。傳遞給授權服務器的重定向URL指向惡意客戶端,而不是合法的客戶端。客戶ID是公開信息,因此建立這樣的網站相當容易。

如果需要客戶端密鑰,會發生什麼情況?

  1. 惡意客戶端將收到授權碼,但它不知道合法的客戶端密碼。
  2. 資源服務器將拒絕發送訪問令牌,因爲沒有提供有效的客戶端密鑰。用戶信息是安全的。

但是如果資源服務器不需要客戶端密鑰呢?

  1. 惡意客戶端會收到授權碼,即使它不知道客戶端密碼,它也會請求訪問令牌。
  2. 資源服務器將接受請求,因爲提供了有效的授權碼和客戶端ID,並且不需要客戶端密鑰。惡意客戶端獲取訪問令牌並且用戶信息受到威脅。

我是否錯過了一些東西,或者這是正確的,並且沒有什麼可以使OAuth2與單頁面應用程序更安全嗎?

回答

0

資源服務器不需要client_secret,因爲只有有效的客戶端可以獲得兌換授權碼。

客戶端必須針對不僅對client_id而且對客戶端註冊的redirect_uri進行驗證。在註冊OAuth客戶端時,您應該要求允許與client_id一起使用的允許的redirect_uri列表。

因此,如果惡意客戶端提出請求,則驗證失敗,因爲只有允許redirect_uri才能重定向。

這在OAuth 2.0 RFC第3.1.2.2節中有詳細說明https://tools.ietf.org/html/rfc6749#section-3.1.2.2