Go에서 JWK를 사용하여 JWT 서명을 확인하는 방법은 무엇인가요?
JWT 인증의 한 가지 과제는 서명을 확인하는 것입니다. JWK와 Go 언어의 경우 특히 그렇습니다.
문제
디코더를 사용하면 JWT를 구문 분석할 수 있습니다. 그러나 특히 JWK를 사용하여 서명을 확인하면 다른 문제가 발생합니다. 다음은 일반적인 오류의 예입니다.
type myClaims struct { jwt.StandardClaims } func main() { claims := &myClaims{} _, err := jwt.ParseWithClaims("ey...", claims, getKey) if err != nil { log.Fatal(err) } }
오류: 키 "kid"가 토큰에 없습니다
해결책
이 문제를 해결하려면 , 공개 키를 검색하는 Keyfunc를 제공해야 합니다. 다음 코드는 솔루션을 보여줍니다.
const jwksURL = "https://companyx.okta.com/oauth2/v1/keys" func getKey(token *jwt.Token) (interface{}, error) { // TODO: Cache the response to avoid repeated HTTP requests set, err := jwk.FetchHTTP(jwksURL) if err != nil { return nil, err } keyID, ok := token.Header["kid"].(string) if !ok { return nil, errors.New("expecting JWT header to have string kid") } if key := set.LookupKeyID(keyID); len(key) == 1 { return key[0].Materialize() } return nil, fmt.Errorf("unable to find key %q", keyID) }
이 getKey 함수:
이 getKey 기능을 제공하면 Go에서 JWK를 사용하여 JWT 서명을 성공적으로 검증할 수 있습니다.
위 내용은 Go에서 JWK를 사용하여 JWT 서명을 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!