ホームページ  >  記事  >  バックエンド開発  >  トークン署名後に JWT クレームが保持されない

トークン署名後に JWT クレームが保持されない

王林
王林転載
2024-02-14 09:40:09617ブラウズ

令牌签名后 JWT 声明不保留

php エディター Banana は、この記事で JWT (JSON Web Token) の重要な概念であるトークン署名を紹介します。 JWT は、Web アプリケーション間で情報を受け渡すためのセキュリティ標準です。 JWT では、トークン署名はトークンの整合性と信頼性を保護するメカニズムです。トークンが署名されると、トークンの改ざんや偽造は直ちに検出されます。ただし、特定の状況では、JWT クレームの署名を保存しない必要がある場合があります。この記事では、この要件を達成する方法について詳しく説明します。

質問内容

次のコードがあります。カスタム クレームを使用して json Web トークンを作成しています (golang-jwt を使用)。問題は、キー (メソッド = hs256) を使用してトークンに署名し、トークンを解析すると、クレームが変化することです。何という間違いを犯したのだろう。

コード:

リーリー ###出力###
package main

import (
    "fmt"
    "time"

    "github.com/golang-jwt/jwt/v4"
)

type mycustomclaims struct {
    userid int
    jwt.registeredclaims
}

func (app *config) generatejwt(userid int) {

    //code to generate jwt
    jt := jwt.newwithclaims(jwt.signingmethodhs256, mycustomclaims{
        userid,
        jwt.registeredclaims{
            expiresat: jwt.newnumericdate(time.now().add(3 * time.hour)),
            issuedat:  jwt.newnumericdate(time.now()),
        },
    })

    fmt.println("what was put", jt.claims.(mycustomclaims).userid)
    token, _ := jt.signedstring(app.secret)

    //code to check whether claims are retained
    parsed_token, _ := jwt.parsewithclaims(token, &mycustomclaims{}, func(t *jwt.token) (interface{}, error) {
        return app.secret, nil
    })

    fmt.println("what was parsed", parsed_token.claims.(*mycustomclaims).userid)

}

回避策

ユーザー ID フィールドをエクスポートする必要があります (大文字で始まるようにします)。未エクスポートのフィールドは JSON エンコードできません。

リーリー

以上がトークン署名後に JWT クレームが保持されないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。