jwt認証メカニズム

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 プロパティにハングすることができます。 

おすすめ

転載: blog.csdn.net/Cat_LIKE_Mouse/article/details/124916148