2016-03-29 11 views
1

ich derzeit an einer API bin zu arbeiten und nach ein wenig Zeit, ich verstehe jetzt, wie JWT ein Token zu erhalten in Go verwenden. Mit diesem Token kann ich einen Benutzer verbunden halten, aber wie kann ich mich von der Client-Anwendung abmelden?Golang und JWT - Einfache Logout

Hier ist mein token.go Code:

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, "" 
    } 
} 

Nach Recherchen fand ich heraus, dass ich eine schwarze Liste verwenden, aber ich möchte wirklich wissen, ob es oben mit etwas einfacher, wie der Code möglich ist.

Ich möchte auch eine Lösung finden, die mit dem Speicher arbeitet nach dem JWT Prozess verwendet. Jemand, der sich die ganze Zeit trennt/verbindet, muss für jede Sitzung nur einen Token haben, nicht einen für ihn und hundert für eine bestimmte schwarze Liste.

+0

JWT-Abmeldungen werden in der Regel auf der Clientseite ausgeführt. Die Ausgabe eines "leeren" Tokens könnte dazu dienen, dasselbe zu tun. – anthony

+1

ein paar Dinge, es ist eine ziemlich schlechte Idee, ein Passwort in einem JWT-Token zu speichern, obwohl sie signiert sind, können sie immer noch leicht Base64 entschlüsselt werden. Für den Rest der Frage ist das im Allgemeinen ziemlich einfach zu lösen mit einer Session-ID, die Sie serverseitig ablaufen lassen, wenn Sie das Token ungültig machen wollen. – photoionized

+0

Ok ich werde das ändern, danke für deine Nachrichten;) – Emixam23

Antwort

3

Erstens: Legen Sie keine sensiblen Anmeldeinformationen in das Token. Sie sind nicht verschlüsselt, und das sollten Sie nicht tun müssen.

Zu beachten:

  • JWTs sind staatenlos: Sie erteilen eine, und es lebt, solange Sie/erlaubt haben, gegen auf dem Server zu validieren.
  • Sie könnten eine neue JWT mit einem Ablauf von ‚jetzt‘ ausgeben, aber die alten JWT würde immer noch gültig ist (das heißt, ein Sicherheitsrisiko).
  • durch http://jwt.io/introduction/

Lesen Wenn Sie über Zugriffstoken nach der Ausgabe auslaufenden steuern müssen, dann sollten Sie eine serverseitige Programm implementieren, die Sie Token direkt ablaufen würde ermöglichen. Der Benutzer würde nur eine ID enthalten, die auf den serverseitigen Speicher verweist.