我正在使用golang中的包“github.com/dgrijalva/jwt”来验证api的命中。
创建jwt令牌的代码是:
token := jwt.NewWithClaims(jwt.SigningMethodHS256, &jwt.MapClaims{
"email": "test@example.com",
"exp": time.Now().Add(time.Hour * 8760).Unix(),
"role": "customer",
"name": "John Doe",
"ip": 0.0.0.0,
"user_agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0"
"id": 1,
})
tokenString, err := token.SignedString([]byte(config.SignKey))以下是使用此令牌的步骤:
response.
如果err != nil { := (200,gin.H{response“响应”:“{ err:”err:"err",msg:会话过期),则承载:= bearerToken := strings.TrimSpace(bearer1)令牌,err:= jwt.Parse(bearerToken,func(令牌*jwt.Token) (接口{},错误){返回config.SignKey,nil})。请登录到continue2.}",}) c.Abort()返回}
现在,假设令牌被解码为url:http://SOMEDOMAIN.COM/api/v1/SOMEAPI
从这个api中,我发出了另一个curl命令的格式:
"curl --header 'Ip: " + ip + "' --header 'User-Agent: " + userAgent + "' --header 'Authorization: " + token + "' 'http://SOMEDOMAIN.COM/api/v2/ANOTHERAPI'"这个命令指向另一个不同的api,但是使用相同的凭据(如令牌)与从登录api创建的相同。
两个具有不同urls的apis都托管在同一台服务器上,但在不同的golang项目文件夹上。
现在,这个包没有对令牌进行身份验证,并给出了以下错误:
{"response":{"code":400,"api_status":10,"message":"Session Expired. Please log out and back in to continue2.","data":{"Inner":{},"Errors":4}}}在这种情况下,我正在寻找错误代码4的含义。
有谁能解释一下Error: 4的含义是什么,为什么它在不同的api上表现得像这样?
发布于 2019-09-26 08:40:31
当我调查你的密码时,
您的config.SignKey被误用了,它似乎是在签名令牌时抛出[]byte。
但是在解析你的标记的时候;
{return config.SignKey, nil}您使用了默认类型,并且没有强制转换[]byte。
{return []byte(config.SignKey), nil}我认为这就是问题所在。
https://stackoverflow.com/questions/58111015
复制相似问题