在Go 中驗證來自AWS Cognito 的JWT 令牌
本文解決了從Amazon Cognito 頒發的JWT 令牌驗證和令牌驗證的挑戰。討論了與 Google 身份驗證和 Cognito 令牌端點的整合過程以及常見陷阱。
取得公鑰
要驗證 JWT 令牌,需要公鑰。 Cognito 在以下位置提供了包含公鑰的JSON Web 金鑰(JWK) 集:
https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/ jwks.json
這個檔案結構可以手動解析產生公鑰,但是使用像jwx這樣的函式庫(https://github.com/lestrrat-go/jwx) 簡化了流程。
使用JWT-Go 進行令牌驗證
一旦公鑰可用,jwt可以利用-go (https://github.com/dgrijalva/jwt-go ) 來驗證令牌。以下步驟概述了這個過程:
keySet, err := jwk.Fetch(THE_COGNITO_URL_DESCRIBED_ABOVE)
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodRS256); !ok { return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) } kid, ok := token.Header["kid"].(string) if !ok { return nil, errors.New("kid header not found") } keys := keySet.LookupKeyID(kid) if !ok { return nil, fmt.Errorf("key with specified kid is not present in jwks") } var publickey interface{} err = keys.Raw(&publickey) if err != nil { return nil, fmt.Errorf("could not parse pubkey") } return publickey, nil })
透過以下步驟,開發人員可以在Go 中有效驗證和解析來自AWS Cognito 的JWT 令牌,確保令牌的真實性和完整性。
以上是如何在 Go 中驗證來自 AWS Cognito 的 JWT 令牌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!