JWT(JSON Web Token)
JWTとは?
JSON Web Token(JWT)は、Web規格(RFC 7519)として、2つのオブジェクトの中でJSONオブジェクトを使用して、簡単で自己包含的な方法で安全に情報を伝達する.
構成
見出し
ヘザーには2つの情報がある
見出し
ヘザーには2つの情報がある
const header = {
"typ": "JWT",
"alg": "HS256"
};
// encode to base64
const encodedPayload = new Buffer(JSON.stringify(payload))
.toString('base64')
.replace('=', '');
console.log('payload: ',encodedPayload);
結果header: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
情報(ペイロード)
登録済みクレーム
サービスに必要な情報ではなく、トークンの情報を記録するために命名されたクレーム.
iss
:コイン発行者sub
:コードネームaud
:トークン対象exp
:トークンの有効期限nbf
: Not Before. コイン有効化日iat
:トークン発行時間jti
:JWTの一意の識別子で、主に重複処理防止公開クレーム
競合を回避するためのURI形式のクレームの名前付け
ex)
{
"https://velopert.com/jwt_claims/is_admin": true
}
非公開クレーム
Xを登録し、Xクレームを公開します.双方が協議で使用し、重複して衝突する可能性があることに注意してください.
ex)
{
"username": "velopert"
}
->エンコード後const payload = {
"iss": "velopert.com",
"exp": "1485270000000",
"https://velopert.com/jwt_claims/is_admin": true,
"userId": "11028373727102",
"username": "velopert"
};
// encode to base64
const encodedPayload = new Buffer(JSON.stringify(payload))
.toString('base64')
.replace('=', '');
console.log('payload: ',encodedPayload);
結果payload: eyJpc3MiOiJ2ZWxvcGVydC5jb20iLCJleHAiOiIxNDg1MjcwMDAwMDAwIiwiaHR0cHM6Ly92ZWxvcGVydC5jb20vand0X2NsYWltcy9pc19hZG1pbiI6dHJ1ZSwidXNlcklkIjoiMTEwMjgzNzM3MjcxMDIiLCJ1c2VybmFtZSI6InZlbG9wZXJ0In0
に署名
ヘッダの符号化値と情報の符号化値を合成した後,所与の秘密鍵でハッシュ生成を行う.
secret
で復号const crypto = require('crypto');
const signature = crypto.createHmac('sha256', 'secret')
.update(encodedHeader + '.' + encodedPayload)
.digest('base64')
.replace('=', '');
console.log('signature: ',signature);
結果signiture: WE5fMufM0NDSVGJ8cAolXGkyB5RmYwCto1pQwDIqo2w
JWTプロパティ
使用状況
Reference
Reference
この問題について(JWT(JSON Web Token)), 我々は、より多くの情報をここで見つけました https://velog.io/@whanhee97/JWTJSON-Web-Tokenテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol