2016-03-29 15 views
1

私は現在APIに取り組んでおり、ちょっと待ってからGoでJWTを使ってトークンを取得する方法を理解しました。このトークンを使用すると、ユーザーを接続したままにすることはできますが、クライアントアプリケーションからどのようにログアウトできますか?ここでGolangとJWT - シンプルなログアウト

は私token.goコードです:研究した後

package main 

import (
    "github.com/dgrijalva/jwt-go" 
    "time" 
) 

const (
    tokenEncodeString = "something" 
) 

func createToken(user User) (string, error) { 
    // create the token                                             
    token := jwt.New(jwt.SigningMethodHS256) 

    // set some claims                                             
    token.Claims["username"] = user.Username; 
    token.Claims["password"] = user.Password; 
    token.Claims["exp"] = time.Now().Add(time.Hour * 72).Unix() 

    //Sign and get the complete encoded token as string                                     
    return (token.SignedString([]byte(tokenEncodeString))) 
} 

func parseToken(unparsedToken string) (bool, string) { 
    token, err := jwt.Parse(unparsedToken, func(token *jwt.Token) (interface{}, error) { 
      return []byte(tokenEncodeString), nil 
    }) 

    if err == nil && token.Valid { 
      return true, unparsedToken 
    } else { 
      return false, "" 
    } 
} 

、私はブラックリストを使用できることを発見したが、私は実際にそれが上記のコードのように簡単なもの、で可能かどうかを知りたいです。

また、JWTプロセスで使用されるメモリで動作するソリューションを探したいと思っています。常に自分を切断/接続する人は、セッションごとにトークンを1つだけ持たなければなりません。トークンは1つではありません。

+0

JWTログアウトは、通常、クライアント側で行われます。 「空の」トークンを発行すると、同じことをすることができます。 – anthony

+1

いくつかのこと、jwtトークンにパスワードを格納するのはかなり悪い考えですが、署名されていても簡単にbase64をデコードできます。残りの質問については、トークンを無効にするときにサーバー側の有効期限が切れるセッションIDで解決するのが一般的です。 – photoionized

+0

よろしくお願いいたします。メッセージに感謝します;) – Emixam23

答えて

3

最初に、重要な資格情報をトークンに入れないでください。それらは暗号化されていないので、その必要はありません。注意することは

:あなたは1を発行し、それは限り、あなたは/がサーバー上に対して検証する許可されてきたように住んでいる:

  • JWTsはステートレスです。
  • 有効期限が 'now'である新しいJWTを発行することはできますが、古いJWTは引き続き有効です(つまり、セキュリティ上のリスク)。
  • あなたは、発行後にアクセストークンの期限切れを制御する必要がある場合は、あなたが直接、トークンを期限切れにすることが可能になるサーバー側のスキームを実装する必要がありhttp://jwt.io/introduction/

を読みます。ユーザーは、サーバー側のストアを参照するIDのみを保持します。

関連する問題