1

人們經常會讀到ResourceOwnerCredentials流是壞的,因爲不能有一個不可信的客戶端(lika是Javascript或移動應用程序)涉及的密鑰。使用RSA256(不對稱)簽名JWT時,甚至需要共享密鑰嗎?

如果令牌是非對稱簽名的,並且可以由客戶端使用OAuth 2.0服務器提供的公鑰JWK(Json Web Key)進行驗證,那麼這甚至有效嗎?

回答

1

你誤解了「資源所有者密碼憑據格蘭特」(link to spec.)

這是什麼流程所做的是,替代資源所有者(如果它是一個人,這將是最終用戶)的憑證與授權碼。作爲該規範說明它可以用來替代傳統系統,例如使用基本認證,爲此需要在客戶端和資源所有者之間建立信任關係。找到一篇好文章,您可以在這裏閱讀更多關於link

另一方面,客戶證書授予是一項授權,要求客戶獲得和維護(link to spec.)。此授予僅適用於機密客戶端

客戶端憑證授予類型只能由機密 客戶端使用。

我相信你對兩種不同的授權類型感到困惑。正如您已經看到的,移動應用程序和JavaScript應用程序是公共客戶端。所以客戶端憑證授予不能用於他們。

此外,一旦確實可以使用公鑰驗證令牌,但要做到這一點,應該通過完成有效的流程來獲取令牌。

對於機密客戶端,可以使用共享密鑰來加密令牌。但是這不能爲公共客戶完成,因爲他們不能保持共享的祕密。

反正這裏是使用客戶端認證的用例(如在說明書中所描述:Client authentication

  • 強制刷新令牌碼和授權碼的結合 它們被髮出到客戶端。當授權代碼通過不安全通道傳輸到重定向 端點或重定向URI的 未完全註冊時,客戶端身份驗證至關重要 。

  • 通過禁用客戶端或 更改憑據從受損客戶端恢復,從而防止攻擊者濫用 被盜取的刷新令牌。更改一組客戶端憑證 憑證要比取消整個集合的刷新令牌要快得多。

  • 實施身份驗證管理最佳做法,其中 需要定期憑據輪換。刷新令牌的整個集合 的旋轉可能是具有挑戰性的,而單個客戶端憑證的輪換更容易。

在事實上,機密的客戶,您可以通過更改共享的祕密改變客戶端身份驗證的靈活性。

+1

對不起,但這並不能回答我的問題。我的問題基本上是:爲什麼共享的祕密(這是公共客戶不可能的)一個好主意?它保護哪個威脅? 我並沒有將客戶端證書與ROPC混淆。我只是想知道客戶祕密(適用於某些贈款而不適用於其他客戶)會使我獲益嗎? – Wolfgang

+0

@Wolfgang在OAuth2.0規範中定義它。我已經添加了相關的詳細信息並擴展了答案。 –