go - 如何提取和验证从前端发送的 token

标签 go jwt token jwt-go

我正在使用“github.com/dgrijalva/jwt-go”,并且能够向我的前端发送一个 token ,我想知道如何检索从前端发送的 token 以便我可以验证如果发送的 token 有效,则安全资源将被传送。

这是从前端 JavaScript 发送的 token :

headers: {
       'Authorization':'Bearer' + localStorage.getItem('id_token')
     }

这是发送 token 的代码

    token := jwt.New(jwt.GetSigningMethod("HS256"))
    claims := make(jwt.MapClaims)
    claims["userName"] = loginRequest.UserName
    claims["exp"] = time.Now().Add(time.Minute * 60).Unix()
    token.Claims = claims
    tokenString, err := token.SignedString([]byte(SecretKey))
    tokenByte, err := json.Marshal(data)
    w.WriteHeader(201)
    w.Write(tokenByte)

这是验证 token 的代码

    func VerifyToken(r *http.Request) bool {

    reqToken := r.Header.Get("Authorization")
    token, err := jwt.Parse(reqToken, func(t *jwt.Token) (interface{}, error) {
        return []byte(SecretKey), nil
    })
    if err == nil && token.Valid {
        fmt.Println("valid token")
        return true
    } else {
        fmt.Println("invalid token")
        return false
    }

}

我得到的是 nil token 作为返回,我猜我已经发送了 bearer,我认为它可能需要解析,如果是的话,如何解析?

最佳答案

在我的例子中,服务器需要一个没有添加字符串的 token 字符串,我在向 Web 服务器发送请求时将 Bearer 字符串添加到 header 中的 token 字符串,即

'Authorization':'Bearer ' + localStorage.getItem('id_token')

在网络服务器上,我们只需要拆分没有 Bearer 字符串的有效 token

reqToken := r.Header.Get("Authorization")
splitToken := strings.Split(reqToken, "Bearer ")
reqToken = splitToken[1]

因此它成为没有 nil 的有效标记。

关于go - 如何提取和验证从前端发送的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54179909/

相关文章:

c# - Nodejs 验证来自 .net 的 jwt token 失败

python - plotly 中的 Streaming API token 是什么?

c++ - 在 C++ 中使用 boost 拆分字符串两次?

multithreading - 在 Go 中使用 map 时忽略 goroutine/thread-safety 的危险是什么?

go - 在非默认命名空间中部署时,Cluster Config 无法获取 Pod

google-app-engine - 在什么应用程序类型/情况下,您会在 Go App Engine Web 应用程序上使用内存缓存或数据存储进行 Web session ?

javascript - 在哪里可以检索 Cognito 身份池的公钥?

json - AWS Cognito 解码 JWKS.json

go - 为什么 go package unsafe 源代码只有六行?

java - 标记化和计数标记