挑戰
從以下機構頒發的JWT 令牌中驗證和提取資訊由於缺乏合適的Go 軟體包,AWS Cognito 可能是一項艱鉅的任務。儘管使用了常用的庫,但該過程仍然很複雜。本文旨在透過使用適當的函式庫提供逐步解決方案來簡化此任務。
驗證的關鍵:公鑰
驗證 JWT 令牌,對應的公鑰是必不可少的。這些金鑰可以從AWS Cognito 提供的JWK(JSON Web Key)URL 取得:
https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json
解析金鑰並驗證令牌
建議的方法是串聯使用jwk 和jwt-go 函式庫。 jwx 簡化了從JWK URL 解析公鑰,而jwt-go 協助處理JWT 令牌:
// Parse public keys keySet, err := jwk.Fetch(THE_COGNITO_URL_DESCRIBED_ABOVE) // Verify JWT token token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { // Check signing method if _, ok := token.Method.(*jwt.SigningMethodRS256); !ok { return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) } // Extract key ID ("kid") from JWT header kid, ok := token.Header["kid"].(string) if !ok { return nil, errors.New("kid header not found") } // Find the public key keys := keySet.LookupKeyID(kid) if !ok { return nil, fmt.Errorf("key with specified kid is not present in jwks") } // Parse public key var publickey interface{} err = keys.Raw(&publickey) if err != nil { return nil, fmt.Errorf("could not parse pubkey") } return publickey, nil
Go 中重新獲得簡單性
透過利用jwx和jwt-go 函式庫,驗證和解析AWS Cognito 頒發的JWT 令牌的過程變得顯著簡化。這種方法為 Go 中的身份驗證和授權提供了清晰簡潔的解決方案。
以上是如何在 Go 中輕鬆解析和驗證 AWS Cognito JWT 令牌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!