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