Go语言实现JWT单点登录中间件

发表时间: 2024-05-20 09:43

jwt中间件

github.com/auth0/go-jwt-middleware

package mainimport (    "context"    "encoding/json"    "log"    "net/http"    "github.com/auth0/go-jwt-middleware/v2"    "github.com/auth0/go-jwt-middleware/v2/validator")var handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {claims := r.Context().Value(jwtmiddleware.ContextKey{}).(*validator.ValidatedClaims)    payload, err := json.Marshal(claims)    if err != nil {    http.Error(w, err.Error(), http.StatusInternalServerError)    return    }    w.Header().Set("Content-Type", "application/json")    w.Write(payload)})func main() {    keyFunc := func(ctx context.Context) (interface{}, error) {        // Our token must be signed using this data.        return []byte("secret"), nil    }    // Set up the validator.    jwtValidator, err := validator.New(        keyFunc,        validator.HS256,        "https://<issuer-url>/",        []string{"<audience>"},    )    if err != nil {        log.Fatalf("failed to set up the validator: %v", err)    }    // Set up the middleware.    middleware := jwtmiddleware.New(jwtValidator.ValidateToken)    http.ListenAndServe("0.0.0.0:3000", middleware.CheckJWT(handler))}