我在 golang 中使用包“github.com/dgrijalva/jwt-go”来验证 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))
以下是使用此令牌的步骤:
- 第一次登录 api 命中,我们调用上面的方法来生成令牌并在 api 响应中返回这个令牌。
之后,另一个 api 在其标头中使用“Bearer”字符串包含此标记。我们解码此令牌并通过以下代码对其进行身份验证:
bearer := strings.Split(c.Request.Header["Authorization"][0], "Bearer") bearerToken := strings.TrimSpace(bearer[1]) token, err := jwt.Parse(bearerToken, func(token *jwt.Token) (interface{}, error) {return config.SignKey, nil}) if err != nil { c.JSON(200, gin.H{"response": "{error: "err", msg: Session Expired. Please log out and back in to continue2.}",}) c.Abort() return }
现在假设令牌被解码为 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 创建的凭据相同。
具有不同 url 的两个 api 都托管在同一服务器上,但 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 url上表现得这样?