2016-03-24 13 views
0

私はJWTのミドルウェアの例を試して、JWTをMartiniと連携させようとしています。それは認証ハンドラに当たると私に戻ります。ここでMartiniが<無効な値>を投げているGoLang JWT?

はストレートの例から、コードです。..

package main 

import (
    "encoding/json" 
    "github.com/auth0/go-jwt-middleware" 
    "github.com/dgrijalva/jwt-go" 
    "github.com/go-martini/martini" 
    "net/http" 
) 

func main() { 

    StartServer() 

} 

func StartServer() { 
    m := martini.Classic() 

    jwtMiddleware := jwtmiddleware.New(jwtmiddleware.Options{ 
     ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) { 
      return []byte("My Secret"), nil 
     }, 
     SigningMethod: jwt.SigningMethodHS256, 
    }) 

    m.Get("/ping", PingHandler) 
    m.Get("/secured/ping", jwtMiddleware.CheckJWT, SecuredPingHandler) 

    m.Run() 
} 

type Response struct { 
    Text string `json:"text"` 
} 

func respondJson(text string, w http.ResponseWriter) { 
    response := Response{text} 

    jsonResponse, err := json.Marshal(response) 
    if err != nil { 
     http.Error(w, err.Error(), http.StatusInternalServerError) 
     return 
    } 

    w.Header().Set("Content-Type", "application/json") 
    w.Write(jsonResponse) 
} 

func PingHandler(w http.ResponseWriter, r *http.Request) { 
    respondJson("All good. You don't need to be authenticated to call this", w) 
} 

func SecuredPingHandler(w http.ResponseWriter, r *http.Request) { 
    respondJson("All good. You only get this message if you're authenticated", w) 
} 

私が認証されていないルートをヒットした場合、それが動作します。認証されたルートにヒットした場合、トークンが必要であることがわかります。正しくないトークンで認証されたルートに到達した場合は、

signature is invalid 
<*errors.errorString Value> 

というようなエラーが表示されます。私が正しいトークンで認証されたルートを押すと、それは私を返信テキストとして与えます。なぜ私は見つけることができません。これは私の個人的なプロジェクトでも同じですが、彼らの例からまっすぐです。

答えて

0

代わりの

m.Get("/secured/ping", jwtMiddleware.CheckJWT, SecuredPingHandler) 

この代わりに

m.Get("/secured/ping", jwtMiddleware.Handler(SecuredPingHandler)) 
をお試しください
関連する問題