>백엔드 개발 >Golang >Go에서 AWS Cognito JWT 토큰을 어떻게 확인합니까?

Go에서 AWS Cognito JWT 토큰을 어떻게 확인합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-27 08:32:14214검색

How to Verify AWS Cognito JWT Tokens in Go?

Go에서 AWS Cognito JWT 토큰 확인

소개

JWT에서 정보 확인 및 추출 Amazon Cognito에서 발행한 토큰은 Go에서 어려울 수 있습니다. 이 문서에서는 이 작업을 효과적으로 처리하기 위한 간결한 가이드를 제공합니다.

사전 조건

AWS Cognito 사용자는 JWKS 엔드포인트에서 공개 JSON 웹 키(JWK) 세트를 검색해야 합니다.

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

JWK 구문 분석 및 확인 JWT

JWK 세트를 구문 분석하고 JWT를 확인하려면 다음 사용을 고려하세요.

  • [jwk](https://github.com/lestrrat-go/jwx): JWK의 경우 구문 분석
  • [jwt-go](https://github.com/dgrijalva/jwt-go): JWT 검증용

구현

  1. 다음을 사용하여 JWK 세트를 가져오고 구문 분석합니다. jwk.Fetch().
  2. jwt.Parse()를 사용하여 JWT 토큰을 구문 분석합니다.
  3. JWT 헤더에서 "kid" 필드를 추출하여 JWK 세트에서 일치하는 공개 키를 식별합니다. .
  4. keySet.LookupKeyID(kid)를 사용하여 "kid"와 연결된 공개 키를 검색합니다. 헤더.
  5. JWT 토큰을 구문 분석할 때 func(token *jwt.Token)(인터페이스{}, 오류) 콜백에 공개 키를 할당합니다.

예 코드

package main

import (
    "fmt"

    jwt "github.com/dgrijalva/jwt-go"
    "github.com/lestrrat-go/jwx/jwk"
)

func main() {
    // Replace with your Cognito token and Cognito JWKS endpoint
    tokenString := "YOUR_JWT_TOKEN"
    endpoint := "YOUR_COGNITO_JWKS_ENDPOINT"

    keySet, err := jwk.Fetch(endpoint)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Parse the JWT token and validate its signature using the public key
    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
    })

    if err != nil {
        fmt.Println(err)
        return
    }

    // Access the claims from the validated JWT token
    claims := token.Claims.(jwt.MapClaims)
    fmt.Println("User ID: ", claims["sub"])
}

결론

jwk 및 jwt-go와 같은 라이브러리를 활용하여 개발자는 Go에서 Cognito JWT 토큰의 데이터를 효율적으로 확인하고 검색할 수 있습니다. , 애플리케이션에서 사용자를 인증하는 안전하고 편리한 방법을 제공합니다.

위 내용은 Go에서 AWS Cognito JWT 토큰을 어떻게 확인합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.