MCPcopy
hub / github.com/appleboy/gin-jwt / ParseToken

Method ParseToken

auth_jwt.go:970–1027  ·  view source on GitHub ↗

ParseToken parse jwt token from gin context

(c *gin.Context)

Source from the content-addressed store, hash-verified

968
969// ParseToken parse jwt token from gin context
970func (mw *GinJWTMiddleware) ParseToken(c *gin.Context) (*jwt.Token, error) {
971 var token string
972 var err error
973
974 methods := strings.Split(mw.TokenLookup, ",")
975 for _, method := range methods {
976 if len(token) > 0 {
977 break
978 }
979 parts := strings.Split(strings.TrimSpace(method), ":")
980 k := strings.TrimSpace(parts[0])
981 v := strings.TrimSpace(parts[1])
982 switch k {
983 case "header":
984 token, err = mw.jwtFromHeader(c, v)
985 case "query":
986 token, err = mw.jwtFromQuery(c, v)
987 case "cookie":
988 token, err = mw.jwtFromCookie(c, v)
989 case "param":
990 token, err = mw.jwtFromParam(c, v)
991 case "form":
992 token, err = mw.jwtFromForm(c, v)
993 }
994 }
995
996 if err != nil {
997 return nil, err
998 }
999
1000 if mw.KeyFunc != nil {
1001 return jwt.Parse(token, func(t *jwt.Token) (any, error) {
1002 key, err := mw.KeyFunc(t)
1003 if err != nil {
1004 return nil, err
1005 }
1006
1007 // save token string if valid
1008 c.Set(tokenContextKey, token)
1009
1010 return key, nil
1011 }, mw.ParseOptions...)
1012 }
1013
1014 return jwt.Parse(token, func(t *jwt.Token) (any, error) {
1015 if jwt.GetSigningMethod(mw.SigningAlgorithm) != t.Method {
1016 return nil, ErrInvalidSigningAlgorithm
1017 }
1018 if mw.usingPublicKeyAlgo() {
1019 return mw.pubKey, nil
1020 }
1021
1022 // save token string if valid
1023 c.Set(tokenContextKey, token)
1024
1025 return mw.Key, nil
1026 }, mw.ParseOptions...)
1027}

Callers 2

GetClaimsFromJWTMethod · 0.95
CheckIfTokenExpireMethod · 0.95

Calls 7

jwtFromHeaderMethod · 0.95
jwtFromQueryMethod · 0.95
jwtFromCookieMethod · 0.95
jwtFromParamMethod · 0.95
jwtFromFormMethod · 0.95
usingPublicKeyAlgoMethod · 0.95
SetMethod · 0.65

Tested by

no test coverage detected