Go JWT没有';t验证接收到的令牌

Go JWT没有';t验证接收到的令牌,go,Go,我有一个registrer端点和一个登录端点,它们使用JWT进行响应 但是,当接收此JWT时,此进程抛出无效令牌 func ValidarToken(w http.ResponseWriter, r *http.Request) bool { token, err := request.ParseFromRequestWithClaims(r, request.OAuth2Extractor, &models.Claim{}, func(token *jwt.Token) (inter

我有一个registrer端点和一个登录端点,它们使用JWT进行响应

但是,当接收此JWT时,此进程抛出无效令牌

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
}

我将JWT与这个库一起签名:github.com/dgrijalva/JWT Go,我这样检查它:

reqToken:=r.Header.Get(“授权”)
splitToken:=strings.Split(reqToken,“承载者”)
如果len(拆分令牌)!=2 {
w、 WriteHeader(http.StatusUnauthorized)
fmt.Fprintln(w,“无比例标记”)
返回
}
reqToken=strings.TrimSpace(splitToken[1])
索赔:=&索赔{}
tkn,err:=jwt.ParseWithClaims(reqToken,claims,func(token*jwt.token)(接口{},错误){
返回jwtKey,无
})
如果出错!=零{
如果err==jwt.ErrSignatureInvalid{
w、 WriteHeader(http.StatusUnauthorized)
fmt.Fprintln(w,“无自动识别”)
返回
}
w、 WriteHeader(http.StatusBadRequest)
fmt.Fprintln(w,“无自动识别”)
返回
}
如果!有效的{
w、 WriteHeader(http.StatusUnauthorized)
返回
}
next.ServeHTTP(w,r)
在本例中,问题(根据注释)是使用RSA证书作为密钥生成HS256令牌。HSA256算法是对称的(有关更多信息,请参阅),因此要使用它进行解码,您需要传入与创建令牌相同的密钥(在本例中,证书作为密钥传入,但库将其视为[]字节,而不是处理证书)


如果要使用非对称加密(使用私钥加密;使用公钥验证),则应使用另一种算法(例如RS256)

请提供更多信息(根据您的问题,不清楚问题是与您的验证代码有关还是与其他问题有关,例如令牌创建、将其添加到标头的例程等)。好的第一步是在收到令牌时手动检查令牌。要执行此操作,请将
tokStr,err:=request.OAuth2Extractor.ExtractToken(r)
添加到
ValidarToken
(将结果转储到日志或控制台)的顶部,并检查此操作是否成功,并且tokStr是完整的令牌(使用类似的方法查看它是否有效)。嗨,英国人,令牌很好。。我有相同的字节,但是当我使用PrivateKey处理这个令牌时,结果是ERR,现在我使用这个tkn,ERR:=jwt.ParseWithClaims(reqToken,claims,func(token*jwt.token)(接口{},error){return jwtKey,nil})我也有同样的错误我的理解是你用私钥创建令牌然后用公钥验证?(至少JWT就是这样工作的)。无论哪种方式,你都没有为某人提供足够的信息来诊断你的问题-提交创建令牌的代码,然后立即尝试验证它将有助于关注你的问题(正如你所说的,这与令牌的通信方式无关)嗨,英国人。。。请查看我编辑的详细信息,谢谢
token:=jwt.NewWithClaims(jwt.SigningMethodHS256,有效负载)
使用HS256签名创建令牌(请参阅)。如果要使用证书,则需要使用SigningMethods256(或SigningMethods256)并进行一些更改以准备使用证书。嗨,费尔南多,谢谢你的回答,但我还是有同样的问题。。用你的代码。。。看,我的私钥和公钥是用OpenSSL库生成的。。在base64中,已编码。