>백엔드 개발 >Golang >Go에서 AWS Cognito의 JWT 토큰을 검증하는 방법은 무엇입니까?

Go에서 AWS Cognito의 JWT 토큰을 검증하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-15 01:40:11758검색

How to Validate JWT Tokens from AWS Cognito in Go?

Go에서 AWS Cognito의 JWT 토큰 검증

이 문서에서는 Amazon Cognito에서 발행한 JWT 토큰에서 정보를 검증하고 추출하는 문제를 다룹니다. Google 인증 및 Cognito의 토큰 엔드포인트와의 통합 프로세스와 일반적인 함정에 대해 논의합니다.

공개 키 얻기

JWT 토큰을 검증하려면 공개 키가 필요합니다. . Cognito는 공개 키가 포함된 JWK(JSON 웹 키) 세트를 다음 위치에서 제공합니다.

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)를 활용하여 토큰을 확인할 수 있습니다. 다음 단계에서는 프로세스를 간략하게 설명합니다.

  1. jwx를 사용하여 JWK 세트를 구문 분석합니다.
keySet, err := jwk.Fetch(THE_COGNITO_URL_DESCRIBED_ABOVE)
  1. jwt-go로 토큰을 구문 분석할 때 " kid" 필드를 사용하여 적절한 키를 찾습니다. 확인:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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