第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 Golang 中驗(yàn)證 JWE 令牌

如何在 Golang 中驗(yàn)證 JWE 令牌

Go
慕姐4208626 2023-03-21 10:36:25
我有 2 個(gè)問(wèn)題,但首先我想提供一些背景信息:在我們的網(wǎng)絡(luò)應(yīng)用程序上,我們使用 NextAuth 生成 jwt 令牌,然后我們將其附加到針對(duì)我們的 Golang 服務(wù)器的請(qǐng)求(用于獲取資源)。生成的令牌似乎是通過(guò) A256GCM 生成的 JWE 令牌。在我們的 golang 服務(wù)器中,我們想要驗(yàn)證令牌并提取它的一些自定義聲明。也就是說(shuō),我們正在努力尋找一種方法來(lái)進(jìn)行解密。我們使用go-jose如下:rawToken := `eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..aiIqD7-cU8Hu92F8.Kx2k99cyLYJR1P0xK_1wUsVO521T7kYSKx-OEutVJcpzbX27hZH0kh2MlBLxQHdmc8q4uXglhjl4JE3nTp_c6nOjga-faHyxYqKrZGJFLlu9MC4JVUWyonX6doFq0gl3UX9ABtP2t35Qly-w1qKH8BdG9x4iB1YM-yvs1w-HpBbMFQR7U7X4oHWIh_YJQlWADesYq6da7A97GSSXs2Go6yb7SH5WWd7iQzDu-UO6eg._PqujCUyMUqOkID80vJiDw`key := []byte("thisisaverylongtextusedforhashing")enc, err := jwt.ParseEncrypted(rawToken)if err != nil {    panic(err)}out := jwt.Claims{}if err := enc.Claims(key, &out); err != nil {    panic(err)}fmt.Printf("iss: %s, sub: %s\n", out.Issuer, out.Subject)我們得到: panic: square/go-jose: error in cryptographic primitivePS:我傳遞給用于 JWE 生成的 nextAuth 的秘密:thisisaverylongtextusedforhashingNextAuth 輸出的原始 JWE 令牌,我想在我的 golang 服務(wù)器中驗(yàn)證它:eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..aiIqD7-cU8Hu92F8.Kx2k99cyLYJR1P0xK_1wUsVO521T7kYSKx-OEutVJcpzbX27hZH0kh2MlBLxQHdmc8q4uXglhjl4JE3nTp_c6nOjga-faHyxYqKrZGJFLlu9MC4JVUWyonX6doFq0gl3UX9ABtP2t35Qly-w1qKH8BdG9x4iB1YM-yvs1w-HpBbMFQR7U7X4oHWIh_YJQlWADesYq6da7A97GSSXs2Go6yb7SH5WWd7iQzDu-UO6eg._PqujCUyMUqOkID80vJiDw。
查看完整描述

1 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

根據(jù)您的意見(jiàn),我匯總了一個(gè)可以幫助您解決問(wèn)題的回復(fù)。首先,我使用了包的版本 2,gopkg.in/go-jose/go-jose.v2因?yàn)椋〒?jù)我所知)該算法A256GCM在最新版本的包中不完全兼容,應(yīng)該是版本 3。您可以在下面找到相關(guān)代碼:


package main


import (

    "crypto/rand"

    "crypto/rsa"

    "fmt"

    "io"

    "os"

    "time"


    "github.com/golang-jwt/jwt"

    jose_jwt "gopkg.in/go-jose/go-jose.v2"

)


type CustomClaims struct {

    Username string `json:"username"`

    Password string `json:"password"`

    jwt.StandardClaims

}


func main() {

    privateKey, err := rsa.GenerateKey(rand.Reader, 2048)

    if err != nil {

        panic(err)

    }


    // generate token

    token, err := generateToken()

    if err != nil {

        panic(err)

    }


    publicKey := &privateKey.PublicKey

    encrypter, err := jose_jwt.NewEncrypter(jose_jwt.A256GCM, jose_jwt.Recipient{

        Algorithm: jose_jwt.RSA_OAEP_256,

        Key:       publicKey,

    }, nil)

    if err != nil {

        panic(err)

    }


    plainText := []byte(token)

    object, err := encrypter.Encrypt(plainText)

    if err != nil {

        panic(err)

    }


    serialized := object.FullSerialize()


    object, err = jose_jwt.ParseEncrypted(serialized)

    if err != nil {

        panic(err)

    }


    decrypted, err := object.Decrypt(privateKey)

    if err != nil {

        panic(err)

    }


    fmt.Println(string(decrypted))


    // parse token

    claims, err := ValidateToken(string(decrypted))

    if err != nil {

        panic(err)

    }


    fmt.Println(len(claims))

}

在這里,我們首先生成一個(gè)私鑰來(lái)加密令牌,然后通過(guò)它的公鑰對(duì)其進(jìn)行解密。為簡(jiǎn)潔起見(jiàn),我省略了用于生成和驗(yàn)證 JWT 令牌的代碼。為了測(cè)試解決方案,我向生成的令牌添加了兩個(gè)自定義聲明(username并且在結(jié)構(gòu)password中定義CustomClaims)。然后,當(dāng)我們解析令牌時(shí),我們將能夠檢索它們的值。

讓我知道這是否對(duì)您有幫助!


查看完整回答
反對(duì) 回復(fù) 2023-03-21
  • 1 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)