亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Go Fiber 中間件的 AWS Cognito JWT 驗證(獲取“密鑰類型無效”)

使用 Go Fiber 中間件的 AWS Cognito JWT 驗證(獲取“密鑰類型無效”)

Go
慕妹3146593 2023-02-14 14:54:31
當我嘗試在我的中間件中驗證基于 Cognito 的 JWT 時,我收到“密鑰類型無效”。目前我在設置 Fiber 應用程序時像這樣設置中間件:// read the "jwks.json" that I got from AWS locallysigningKey, err := ioutil.ReadFile("./jwks.json")if err != nil {    log.Fatal("Error when opening file: ", err)}// pass in the signing key when middle ware is createdapp.Get("/api", middleware.Protected(signingKey), handlers.ReadSomeData)然后我的中間件看起來像這樣,其中大部分來自 Go Fiber 的 JWT 示例存儲庫。func Protected(signingKey []byte) func(*fiber.Ctx) error {    return jwtware.New(jwtware.Config{        SigningKey:    signingKey,        ErrorHandler:  jwtError,        SigningMethod: "RS256",    })}func jwtError(c *fiber.Ctx, err error) error {    if err.Error() == "Missing or malformed JWT" {        c.Status(fiber.StatusBadRequest)        return c.JSON(fiber.Map{"status": "error", "message": err.Error(), "data": nil})    } else {        c.Status(fiber.StatusUnauthorized)        return c.JSON(fiber.Map{"status": "error", "message": err.Error(), "data": nil})    }}回答后,我嘗試使用“SigningKeys”參數,但類型不匹配,所以我最終讀取了 jwks json 文件,如下所示:func Protected() func(*fiber.Ctx) error {    signingKey, err := os.ReadFile("./jwks.json")    if err != nil {    }    x := make(map[string]interface{})    json.Unmarshal(signingKey, &x)    return jwtware.New(jwtware.Config{        SigningKeys:   x,        ErrorHandler:  jwtError,        SigningMethod: "RS256",    })}但是現在我的錯誤是“意外的 jwt 密鑰 id=XXXXXXXXXXXX”
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

事實證明,如果您向 fiber 提供密鑰的 url,fiber 具有提取 jwks.json 數據的內置功能??赡苓€有一種方法可以讓它加載本地文件,但是使用 AWS 密鑰您通常不會這樣做 - 密鑰可能會根據您所處的環境而改變 - 生產或測試。

您需要知道您的 AWS 用戶池區域和該用戶池的 ID。這通常在用戶池設置視圖中提供,但您可以根據 AWS 文檔中提供的以下示例輕松想出它:

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json

有關更多信息,請參閱:AWS:驗證 JSON 網絡令牌

這是一個讓它與 AWS Cognito JWT url 一起工作的簡單示例:

 authMiddleware := jwtware.New(jwtware.Config{

        TokenLookup: "header:Authorization",

        AuthScheme:  "Bearer",

        KeySetURLs: []string{

            "https://cognito-idp.some-region-1.amazonaws.com/some-region-1_MYUserPoolId/.well-known/jwks.json",

        },

    })


    // Match any route

    app.Use(authMiddleware, func(c *fiber.Ctx) error {

        return c.SendString("?? Yay!")

    })


    log.Fatal(app.Listen(":3000"))

您現在應該能夠使用這樣的請求對其進行測試:


curl --location --request GET 'http://127.0.0.1:3000' \

--header 'Authorization: Bearer MyAWSJWTToken..'

或者使用任何 HTTP 客戶端(如 Postman)。您必須在 Authorization 標頭中提供您的 JWT。


也可以看看:


查看完整回答
反對 回復 2023-02-14
  • 1 回答
  • 0 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號