私はgoとjwtで始まります。入力バイト0の不正なbase64データ
私はハードコードされた秘密を持っています。 とキー
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,
})
以降だからlocalhostの私のルート
r.Handle("/protected", jwtMiddleware.Handler(ProtectedTestHandler)).Methods("GET")
にjwtMiddlewareを追加取得するには、ルート:3000 /保護された意志の出力がエラー必要な許可トークン
これを発見していません働く
/トークンからトークンが出力されます。これも機能します。
そして最後に/(郵便配達中)認証で保護:ベアラ{トークン}入力バイト0 で
ウィル出力違法base64のデータ私はこれがなぜ起こるか本当に混乱しています。
のように行われるべきでは基本的に私はベース64でエンコードされた文字列を期待」を意味し、今表示されていませんしかし何か他のものがあります "。 (おそらく何かデコードされたものかエラーですか?)ハッピーなデバッグ。 – Jakumi
jwtMiddleware.Handlerを追加した場合にのみ発生するので、それは超奇妙です。ミドルウェアを削除してルートを公開すると、エラーは発生しません。 –
よく、jwtはエンコードされなければなりません(これは私が思うような仕様ですか?)base64(header) "。" base64(ペイロード) "" base64(署名)。したがって、最初の部分が64文字の文字列で始まらない場合、おそらく正しくエンコードされません。 jwtMiddlewareライブラリを正しく使用する方法を知る必要があります。なぜなら、おそらくそれがうまくいかない理由でしょう。セットアップの仕方によっては、あなたが得ている「トークン」がエラーである可能性があります。いずれにせよ、いくつかのデバッグが順番に行われています – Jakumi