Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengesahkan Token JWT AWS Cognito dalam Go?

Bagaimana untuk Mengesahkan Token JWT AWS Cognito dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 08:32:14217semak imbas

How to Verify AWS Cognito JWT Tokens in Go?

Mengesahkan AWS Cognito JWT Token dalam Go

Pengenalan

Mengesahkan dan mengekstrak maklumat daripada JWT token yang dikeluarkan oleh Amazon Cognito boleh menjadi cabaran dalam Go. Artikel ini menyediakan panduan ringkas untuk mengendalikan tugas ini dengan berkesan.

Prasyarat

Pengguna AWS Cognito mesti mendapatkan JSON Web Key (JWK) awam yang ditetapkan daripada titik akhir JWKS:

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

Menghuraikan JWK dan Mengesahkan JWT

Untuk menghuraikan set JWK dan mengesahkan JWT, pertimbangkan untuk menggunakan:

  • [jwk](https://github.com/lestrrat-go/jwx): Untuk JWK menghurai
  • [jwt-go](https://github.com/dgrijalva/jwt-go): Untuk pengesahan JWT

Pelaksanaan

  1. Ambil dan huraikan set JWK menggunakan jwk.Fetch().
  2. Gunakan jwt.Parse() untuk menghuraikan token JWT.
  3. Ekstrak medan "kanak-kanak" daripada pengepala JWT untuk mengenal pasti kunci awam yang sepadan dalam set JWK .
  4. Gunakan keySet.LookupKeyID(kanak-kanak) untuk mendapatkan semula kunci awam yang dikaitkan dengan pengepala "kanak-kanak".
  5. Tetapkan kunci awam kepada panggilan balik func(token *jwt.Token) (antara muka{}, ralat) apabila menghuraikan token JWT.

Contoh Kod

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"])
}

Kesimpulan

Dengan menggunakan perpustakaan seperti jwk dan jwt-go, pembangun boleh mengesahkan dan mendapatkan semula data daripada token Cognito JWT dalam Go dengan cekap , menyediakan cara yang selamat dan mudah untuk mengesahkan pengguna dalam aplikasi mereka.

Atas ialah kandungan terperinci Bagaimana untuk Mengesahkan Token JWT AWS Cognito dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn