Golang和JWT-简单注销

Golang和JWT-简单注销,go,jwt,token,logout,jwt-go,Go,Jwt,Token,Logout,Jwt Go,我目前正在开发一个API,过了一段时间,我现在了解了如何在Go中使用JWT来获取令牌。有了这个令牌,我可以让用户保持连接,但是,如何从客户端应用程序注销 这是我的token.gocode: package main import ( "github.com/dgrijalva/jwt-go" "time" ) const ( tokenEncodeString = "something" ) func createToken(user User) (string,

我目前正在开发一个API,过了一段时间,我现在了解了如何在Go中使用JWT来获取令牌。有了这个令牌,我可以让用户保持连接,但是,如何从客户端应用程序注销

这是我的
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, ""
    }
}
经过研究,我发现我可以使用黑名单,但我真的想知道是否可以使用更简单的方法,比如上面的代码

我还想找到一个与JWT进程使用的内存一起工作的解决方案。一直断开连接的人每次会话只能有一个令牌,而不是一个令牌,在给定的黑名单中有一百个令牌。

首先:不要(永远)在令牌中放入敏感凭据。它们不是加密的,您不需要这样做

注意:

  • JWT是无状态的:您发布了一个JWT,并且只要您允许/正在服务器上进行验证,JWT就会一直存在
  • 您可以发布一个有效期为“现在”的新JWT,但旧JWT仍然有效(即存在安全风险)
  • 通读
如果您需要控制发行后过期的访问令牌,那么您应该实现一个服务器端方案,它允许您直接使令牌过期。用户只会持有引用服务器端存储的ID。

首先:不要(永远)在令牌中放置敏感凭据。它们不是加密的,您不需要这样做

注意:

  • JWT是无状态的:您发布了一个JWT,并且只要您允许/正在服务器上进行验证,JWT就会一直存在
  • 您可以发布一个有效期为“现在”的新JWT,但旧JWT仍然有效(即存在安全风险)
  • 通读

如果您需要控制发行后过期的访问令牌,那么您应该实现一个服务器端方案,它允许您直接使令牌过期。用户只持有引用服务器端存储的ID。

JWT注销通常在客户端完成。发布一个“空”令牌也可以起到同样的作用。有几件事,在jwt令牌中存储密码是一个非常糟糕的主意,尽管它们已经签名,但仍然可以很容易地进行base64解码。对于问题的其余部分,通常这是一个相当容易解决的问题,当您想使令牌无效时,会话id会在服务器端过期。好的,我会更改它,谢谢您的消息;)JWT注销通常在客户端完成。发布一个“空”令牌也可以起到同样的作用。有几件事,在jwt令牌中存储密码是一个非常糟糕的主意,尽管它们已经签名,但仍然可以很容易地进行base64解码。对于问题的其余部分,通常这是一个相当容易解决的问题,当您想使令牌无效时,会话id会在服务器端过期。好的,我会更改它,谢谢您的消息;)