[英]JWT doesn't validate the token received
我有一个注册端点和一个使用 JWT 响应的登录端点
但是当收到这个 JWT 时,这个过程会抛出 INVALID TOKEN
func ValidarToken(w http.ResponseWriter, r *http.Request) bool {
token, err := request.ParseFromRequestWithClaims(r, request.OAuth2Extractor, &models.Claim{}, func(token *jwt.Token) (interface{}, error){
return VerifyKey, nil
})
if err != nil {
switch err.(type) {
case *jwt.ValidationError:
vErr := err.(*jwt.ValidationError)
switch vErr.Errors {
case jwt.ValidationErrorExpired:
http.Error(w, "Su token ha expirado "+err.Error(),http.StatusUnauthorized)
case jwt.ValidationErrorSignatureInvalid:
http.Error(w, "La firma del token no coincide "+err.Error(),http.StatusUnauthorized)
default:
http.Error(w, "Su token no es válido "+err.Error(),http.StatusUnauthorized)
}
default:
http.Error(w, "Su token no es válido "+err.Error(),http.StatusUnauthorized)
}
return false
}
我已经阅读了很多文档,但我不明白为什么我生成了相同的令牌,然后它不被同一个应用程序识别
谢谢
更新 :
这是我的生成 JWT 代码
func GeneroJWT(t models.Usuario) (string, error) {
leoClaves()
payload := jwt.MapClaims{
"email": t.Email,
"nombre": t.Nombre,
"apellidos": t.Apellidos,
"fecha_nacimiento": t.FechaNacimiento,
"biografia": t.Biografia,
"ubicacion": t.Ubicacion,
"sitioweb": t.SitioWeb,
"exp": time.Now().Add(time.Hour * 24).Unix(),
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, payload)
tokenStr, err := token.SignedString(SignKey)
if err != nil {
return tokenStr, err
}
return tokenStr,nil
}
我用这个库在 Go 中签署了 JWT: github.com/dgrijalva/jwt-go ,我像这样检查它:
reqToken := r.Header.Get("Authorization") splitToken := strings.Split(reqToken, "Bearer") if len(splitToken) != 2 { w.WriteHeader(http.StatusUnauthorized) fmt.Fprintln(w, "No se ha proporcionado el token") return } reqToken = strings.TrimSpace(splitToken[1]) claims := &Claims{} tkn, err := jwt.ParseWithClaims(reqToken, claims, func(token *jwt.Token) (interface{}, error) { return jwtKey, nil }) if err != nil { if err == jwt.ErrSignatureInvalid { w.WriteHeader(http.StatusUnauthorized) fmt.Fprintln(w, "No autenticado") return } w.WriteHeader(http.StatusBadRequest) fmt.Fprintln(w, "No autenticado") return } if !tkn.Valid { w.WriteHeader(http.StatusUnauthorized) return } next.ServeHTTP(w, r)
我希望这对你有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.