2017-07-30 10 views
0

現在、Golangアプリケーションで作業しています。クライアント側からJWTトークンを受け取り、Goでトークンをデコードして情報を取得する必要があります。 JWTトークンを扱うライブラリがあり、私はthisになってしまったが、私が必要とするものを簡単に作る方法は分からない。 私はトークンを持っており、情報をマップまたは少なくともjsonにデコードする必要があります。どのようにそれを行うためのガイドを見つけることができますか? ありがとうございました!ゴランのJWTトークンをデコードする

+0

https://github.com/dgrijalva/jwt-go/blob/master/example_test.go – zerkms

+0

@zerkms私はすでにそれを見ましたが、その例では、私が行っているデータの構造体を持つべきですこのケースではMyCustomClaimsを受け取るが、それは相手側から簡単に変更することができ、何かが追加または削除されたときにいつでも再構築することは望ましくない。 –

+0

[Go Language and Verify JWT]の可能な複製(https:// stackoverflow .com/questions/41077953/go-language-and-verify-jwt) –

答えて

1

機能jwt.ParseWithClaimsjwt.Claimsのインターフェイスを2番目の引数として受け入れます。構造体ベースのカスタムクレームの他に、mapベースのクレーム、つまりjwt.MapClaimsを提供します。 トークンを単にMapClaimsにデコードすることができます。

tokenString := "<YOUR TOKEN STRING>"  
claims := jwt.MapClaims{} 
token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) { 
    return []byte("<YOUR VERIFICATION KEY>"), nil 
}) 
// ... error handling 

// do something with decoded claims 
for key, val := range claims { 
    fmt.Printf("Key: %v, value: %v\n", key, val) 
} 
1

実装にはgithub.com/dgrijalva/jwt-go go laabaryを使用してください。以下のようにして、API要求からJWTトークン情報を抽出することができる。

使用する投稿要求からJWTトークンを転記する場合。ルーティングセクションでJWT情報を抽出する必要があります。

func RequireTokenAuthentication(inner http.Handler) http.Handler { 
     return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
      token, err := jwt.ParseFromRequest(
       r, 
       func(token *jwt.Token) (interface{}, error) { 
        return VERIFICATION.PublicKey, nil 
       }) 
      if err != nil || !token.Valid) { 
       log.Debug("Authentication failed " + err.Error()) 
       w.WriteHeader(http.StatusForbidden) 
       return 
      } else { 
       r.Header.Set("username", token.Claims["username"].(string)) 
       r.Header.Set("userid", strconv.FormatFloat((token.Claims["userid"]).(float64), 'f', 0, 64)) 
      } 
      inner.ServeHTTP(w, r) 
     }) 
    } 

VERIFICATION.PublicKey:検証用の鍵(お使いのシステムでは、public.keyファイルから公開鍵を取得する)

私に知らせてhappen.Pleaseすべての問題。私はあなたに助けを与えることができます。

関連する問題