jst は通常、ヘッダー (head)、ペイロード (ペイロード)、signatrue (署名) の 3 つの部分で構成されます。
3 つをカンマで区切ります。
Header.Payload.Signatrue
- ペイロードは実際のユーザー情報部分であり、暗号化された文字列です
- header と signaltrue はセキュリティ関連の部分です
インストール:
npm インストール jsonwebtoken Express-jwt
- jsonwebtokenはjwt文字列の生成に使用されます
- Express-jwt は、jwt 文字列を解析して json オブジェクトに復元するために使用されます。
// 导入用于生成的 jwt 字符串的包
const jwt = require('jsonwebtoken')
// 导入用于将客户端 发送过来的 jwt 字符串,解析还原成 json 对象 的包
//const expressJWT = require('express-jwt')
const { expressjwt } = require("express-jwt") //@7版本
秘密鍵を定義する
jwt キーのセキュリティを確保し、ネットワーク送信中に jwt 文字列が解読されるのを防ぐために、暗号化と復号化用の秘密キーを定義する必要があります。
- jwt 文字列を生成するときは、秘密キーを使用してユーザー情報を暗号化し、最終的に暗号化された jwt を取得する必要があります。
- jwt 文字列を解析して json オブジェクトに復元するには、秘密キーを使用して復号化する必要があります。
// secret 的本质就是一个字符串
const secretKey =‘^_^’
ログイン成功後に jwt 文字列を生成する
jsonwebtoken パッケージによって提供されるsign() メソッドを呼び出して、ユーザーの情報を jwt 文字列に暗号化し、クライアントに応答します。
app.get('/login',(req,res)=>{
//调用 jwt ,sign(),生成 jwt 字符串,三个参数分别是:用户信息对象,加密密钥,配置对象
res.send({
status:200,
msg:'成功',
data:req.query,
token:jwt.sign({
username:'Bearer ' + req.body.username
},secretKey,{
expiresIn:'30s'
})
})
}),
jwt文字列をjsonオブジェクトに復元します
クライアントがこれらの承認されたインターフェイスにアクセスするたびに、リクエスト ヘッダーの Authorizaction に対する ID 認証のためにトークン文字列をサーバーにアクティブに送信する必要があります。
この時点で、サーバーはクライアントから送信されたトークンを自動的に解析し、express-jwt の中間キーを介して json オブジェクトに復元できます。
// 使用 app.use() 来注册中间件 express-jwt @7
// expressJWT({secret:secretKey}) 就是用来解析 Token的中间件
// 用来指定那些借口不需要访问权限
app.use(
jwt({
secret: "shhhhhhared-secret",
algorithms: ["HS256"],
}).unless({ path: ["/token"] })
);
注: Express-jwt が正常に構成されている限り、解析されたユーザー情報を req.user プロパティにハングすることができます。