簡體   English   中英

如何檢查 AWS API 網關授權方中的用戶角色?

[英]How to check for user role in AWS API gateway authorizer?

我正在嘗試使用 AWS Cognito 和 AWS API 網關進行身份驗證和授權。 我設法在登錄時為用戶提供了一個 JWT 令牌,並且在我的網關上執行某個獲取請求時,它會檢查授權 header 並使用 Cognito(用戶池)對其進行驗證。

我面臨的問題是它不檢查任何用戶角色。 某些用戶在我的 Cognito 管理員組中,但我不能指定只有來自管理員組的用戶才能發出此類請求。 目前,如果任何擁有有效 JWT 令牌的用戶在 API 網關上執行該 GET 請求,它就會執行它。

我想我可以使用自定義 lambda 授權方來檢查角色。 這不是很安全,因為你(一個潛在的黑客)仍然可以使用 JWT 令牌來改變它

  "cognito:groups": [
    "User"
  ],
  "iss": "",
  "version": 2,
  "client_id": "6uad7uthfhv3a7p9aihdbjl3tt",
  "token_use": "access",
  "scope": "aws.cognito.signin.user.admin phone openid profile email",
  "auth_time": 1668780261,
  "exp": 1668783861,
  "iat": 1668780262,
  "jti": "",
  "username": "test"
}

對此:

  "cognito:groups": [
    "Admins"
  ],
  "iss": "",
  "version": 2,
  "client_id": "6uad7uthfhv3a7p9aihdbjl3tt",
  "token_use": "access",
  "scope": "aws.cognito.signin.user.admin phone openid profile email",
  "auth_time": 1668780261,
  "exp": 1668783861,
  "iat": 1668780262,
  "jti": "",
  "username": "test"
}

並再次對令牌進行編碼,以進行他不應該進行的 API 次調用。

我的另一個想法是直接使用 Cognito 從 Lambda 授權方檢查用戶是否具有正確的角色,但我不知道這是否可行。

是否有更好、更合乎邏輯的方法來檢查 Cognito 用戶是否在用戶池中以及它是否具有正確的角色?

首先,我們應該有一個正確實施的 JWT 驗證機制。 這樣,可以輕松識別被篡改的令牌。

請閱讀本文了解更多詳情。 它說:

JSON Web 令牌是在各方之間安全傳輸信息的好方法。 因為 JWT 可以簽名——例如,使用公鑰/私鑰對——你可以確定發送者是他們所說的人。 此外,由於簽名是使用 header 和有效負載計算的,您還可以驗證內容是否未被篡改。

因此,在Lambda 授權方中,我們可以進行 JWT 驗證。 然后根據請求路徑和分配的角色,它應該能夠決定是否調用 API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM