2016-08-13 4 views
1

나는 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

지금이 일어날 경우 표시되지 않습니다 ,하지만 "입력 바이트 0에서 불법 base64로 데이터가"기본적으로 나는베이스 64로 인코딩 된 문자열을 기대 "를 의미

Bearer my-special-token 
그러나 다른 것을 얻었다 ". (아마도 무언가가 디코딩되었거나 오류가 있습니까?) 해피 디버깅. – Jakumi

+0

jwtMiddleware.Handler를 추가하는 경우에만 발생하기 때문에 매우 이상합니다. 미들웨어를 제거하고 라우트를 공용으로 액세스 가능하게 만들면 오류가 없습니다. –

+0

글쎄, jwt 인코딩해야합니다 (그것은 내가 생각하는 사양에있어?) base64 (header) "." base64 (페이로드) "." base64 (서명). 따라서 첫 번째 부분이 기본 64 자로 시작하지 않으면 올바르게 인코딩되지 않은 것입니다. jwtMiddleware 라이브러리를 올바르게 사용하는 방법을 알아 내야합니다. 아마도 * 작동하지 않는 이유 일 것입니다. 설정에 따라 ... "토큰"이 잘못되었을 수 있습니다. 어쨌든, 어떤 디버깅 순서는 – Jakumi

답변

1

토큰 주위에 curlies를 사용하지 마십시오. 여러 곳의 문서는 토큰을 줄이 감싸기 때문에 혼란 스럽습니다. 자리 표시자를 나타내는 것입니다. 실제로 토큰을 포장하지 않아도됩니다. 이런 식으로하지 마십시오.

Bearer {my-special-token} 

그것은 같이 수행해야이

+0

입니다. 도움이 되었다면, 그것을 upvote하고 정답으로 확인하십시오. – jamrizzi

관련 문제