나는 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,
})
얻을 이후
r.Handle("/protected", jwtMiddleware.Handler(ProtectedTestHandler)).Methods("GET")
그래서 localhost를 내 경로에 jwtMiddleware를 추가합니다 : 토큰
이
를 찾을 수없는 오류 필수 권한 부여 3000/보호가 출력됩니다 공장./토큰이 내 토큰을 출력합니다. 이것도 작동합니다.
그리고 마지막으로/(우편 배달부)에 부여로 보호 : 무기명 {토큰} 입력 바이트 0 에서
윌 출력 불법 base64로 데이터 내가 왜 이런 일 정말 혼란 스러워요.
지금이 일어날 경우 표시되지 않습니다 ,하지만 "입력 바이트 0에서 불법 base64로 데이터가"기본적으로 나는베이스 64로 인코딩 된 문자열을 기대 "를 의미
그러나 다른 것을 얻었다 ". (아마도 무언가가 디코딩되었거나 오류가 있습니까?) 해피 디버깅. – JakumijwtMiddleware.Handler를 추가하는 경우에만 발생하기 때문에 매우 이상합니다. 미들웨어를 제거하고 라우트를 공용으로 액세스 가능하게 만들면 오류가 없습니다. –
글쎄, jwt 인코딩해야합니다 (그것은 내가 생각하는 사양에있어?) base64 (header) "." base64 (페이로드) "." base64 (서명). 따라서 첫 번째 부분이 기본 64 자로 시작하지 않으면 올바르게 인코딩되지 않은 것입니다. jwtMiddleware 라이브러리를 올바르게 사용하는 방법을 알아 내야합니다. 아마도 * 작동하지 않는 이유 일 것입니다. 설정에 따라 ... "토큰"이 잘못되었을 수 있습니다. 어쨌든, 어떤 디버깅 순서는 – Jakumi