JWT 不验证收到的令牌

我有一个注册器端点和一个登录端点,它们使用 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

}

http://img2.mukewang.com/627a1c0e0001dc5f11870559.jpg

我已经阅读了很多文档,但我不明白为什么我生成相同的令牌,然后它不能被同一个应用程序识别



DIEA
浏览 201回答 2
2回答

慕勒3428872

我使用这个库在 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)

千万里不及你

在这种情况下,问题(根据评论)是使用 RSA 证书作为机密生成 HS256 令牌。HSA256 算法是对称的(有关更多信息,请参阅此问题),因此要使用它进行解码,您需要传入与创建令牌相同的秘密(在这种情况下,证书作为密钥传入,但库正在处理它作为 []byte 而不是处理证书)。如果您想使用非对称加密(使用私钥加密;使用公钥验证),则应使用另一种算法(例如 RS256)。例子。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go