go中输入字节0处的非法base64数据

Jak*_*zak 7 go jwt

我从 go 和 jwt 开始。

为了测试目的,我有一个硬编码的秘密。以及获取钥匙的路线

const secretKey = "YOLOSWAG"

var mySigningKey = []byte(secretKey)


var GetTokenHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    token := jwt.New(jwt.SigningMethodHS256)
    token.Claims = jwt.MapClaims{
        "admin": true,
        "name":  "John Doe",
        "exp":   time.Now().Add(time.Hour * 24).Unix(),
    }

    tokenString, _ := token.SignedString(mySigningKey)

    w.Write([]byte(tokenString))
})

var jwtMiddleware = jwtmiddleware.New(jwtmiddleware.Options{
    ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
        return mySigningKey, nil
    },
    SigningMethod: jwt.SigningMethodHS256,
})
Run Code Online (Sandbox Code Playgroud)

后来将 jwtMiddleware 添加到我的路线中

r.Handle("/protected", jwtMiddleware.Handler(ProtectedTestHandler)).Methods("GET")
Run Code Online (Sandbox Code Playgroud)

所以 localhost:3000/protected 会输出一个错误 未找到所需的授权令牌

这有效。

/token 将输出我的令牌。这也有效。

最后 /protected(在邮递员中)授权:Bearer {token}

将在输入字节 0 处输出非法的 base64 数据我真的很困惑为什么会发生这种情况。

Jam*_*ser 3

不要在令牌周围使用花括号。许多地方的文档令人困惑,因为它将您的令牌包裹在花括号中。它的目的是代表一个占位符。实际上你不应该用它们来包装你的令牌。不要这样做。

Bearer {my-special-token}
Run Code Online (Sandbox Code Playgroud)

应该这样做

Bearer my-special-token
Run Code Online (Sandbox Code Playgroud)