OAuth2 JWT 認證

介紹

OAuth2 JWT 認證是 OAuth 2.0 身份認證方案之一,允許客戶端透過 JSON Web Token(JWT)進行身份驗證。

OpenResty Edge 中提供了對應的頁面規則動作來實現此功能。

這個動作有以下引數:

  • 關鍵字:用於指定關鍵字的型別,取值有:探測、對稱秘鑰、公鑰。
    • 選擇 探測 時,會要求輸入探測 URL。如 https://accounts.google.com/.well-known/openid-configuration。這是一種發現 OAuth2 配置資訊的方式。它允許客戶端在不與認證伺服器直接互動的情況下,自動獲取 OAuth2 協議需要的資訊,例如授權伺服器的地址,令牌端點和令牌簽名公鑰。
    • 選擇 對稱秘鑰時,會要求輸入秘鑰。
    • 選擇 公鑰時,會要求輸入公鑰。
  • 接受不支援的演算法:如果要拒絕使用不支援演算法簽名的令牌,請不要開啟這個選項。如果開啟,則完全無法驗證令牌簽名。
  • 令牌簽名演算法:用於指定一種或多種令牌簽名演算法。取值有:HS256、HS512、RS256、RS512、ES256、ES512、none。

示例

  • 我們使用對稱秘鑰來進行演示,因此這裡型別選擇 對稱秘鑰
  • 加密演算法選擇 HS256,這是一種對稱金鑰的雜湊演算法(使用 SHA-256 的 HMAC)。

傳送一個不帶認證資訊的請求:

$ curl http://test.com/anything -v
...
< HTTP/1.1 403 Forbidden
...

可以看到返回了 403 狀態碼,表示缺少認證資訊或認證資訊不正確,禁止訪問。

然後傳送一個帶有錯誤的認證資訊的請求:

$ curl http://test.com/anything -H 'Authorization: Bearer invalid-token' -v
...
< HTTP/1.1 403 Forbidden
...

同樣返回了 403 狀態碼。

接著再傳送一個帶正確認證資訊的請求:

$ curl http://test.com/anything -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmb28iOiJiYXIifQ._FOTfoCTzKHWcBDYf1rfRkg-g6D_Mg8dnccLR_geCH0' -v
...
< HTTP/1.1 404 Not Found
...

返回了 404 而沒有返回 403,表示已經透過了認證,但請求訪問了不存在的資源(/anything)。