首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在jwt-go ParseWithClaims中解析JWT令牌?

如何在jwt-go ParseWithClaims中解析JWT令牌?
EN

Stack Overflow用户
提问于 2021-07-22 15:56:28
回答 1查看 310关注 0票数 1

我已经开发了以下方法,它应该支持基于令牌的身份验证(jwt)。应该使用异步过程来生成令牌。

源代码似乎工作到并包括签名令牌的生成。我在使用ParseWithClaims查询令牌时遇到一个问题。有人能帮帮忙吗?

代码语言:javascript
复制
package controllers

import (
    "crypto/rand"
    rsaKeys "crypto/rsa"
    "fmt"

    jwtgo "github.com/dgrijalva/jwt-go"
    "github.com/gofiber/fiber"
)

func Login(c *fiber.Ctx) error {
    
    type TestClaims struct {
        HAPP string `json:"happ"`
        jwtgo.StandardClaims
    }

    currentPrivateKey, err := rsaKeys.GenerateKey(rand.Reader, 512)

    claims := TestClaims{
        "owa",
        jwtgo.StandardClaims{
            Issuer:    "test",
            ExpiresAt: 15000,
        },
    }

    token := jwtgo.NewWithClaims(jwtgo.SigningMethodRS256, claims)

    tokenSigned, err := token.SignedString(currentPrivateKey)
    if err != nil {
        fmt.Printf("Failed to sign in account %v", err)
    }

    //Issue is in this statement
    _, errTest := jwtgo.ParseWithClaims(tokenSigned, &TestClaims{"owa", jwtgo.StandardClaims{}}, func(token *jwtgo.Token) (interface{}, error) {
        return currentPrivateKey, nil
    })

    if errTest != nil {
        fmt.Printf("Error Message: %v", errTest) //Does throw error: key is of invalid type
    }

    return c.JSON(fiber.Map{
        "message": "success",
    })
}
EN

回答 1

Stack Overflow用户

发布于 2021-07-22 16:55:59

要验证JWT,您需要公共密钥,特别是ParseWithClaims需要一个*rsa.PublicKey类型的密钥。

您可以使用PrivateKey.Public从私钥中获取它

代码语言:javascript
复制
tok, err := jwtgo.ParseWithClaims(tokenSigned, &TestClaims{"owa", jwtgo.StandardClaims{}}, func(token *jwtgo.Token) (interface{}, error) {
    return currentPrivateKey.Public(), nil
})

请注意,dgrijalva/jwt-gounmaintained。如果可以,请切换到社区分支golang-jwt/jwt,它包含关键的安全修复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68481150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档