JSON Webトークン:JWTを使用して承認RESTful API


✔ JWTとは


💡 JSON Web Token is an open and standard (RFC 7519) way for you to represent your user’s identity securely during a two-party interaction. Particularly, when two systems exchange data you can use JSON Web Token to identify your user without having to send private credentials on every request.


JWTは典型的にこのように見える
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEzODY4OTkxMzEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU5IiwiaWF0IjoxMzg2ODk4OTUxfQ.uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_IWuA5MaMo
一見して複雑に見えますが、あなたが理解するならば、JWTの構造は以下の通り単純です
<base64-encoded header>.<base64-encoded payload>.<base64-encoded signature>
言い換えれば、よく形成されたJWTは3つの連結されたbase 64 url符号化されたストリングから成ります.
  • ヘッダー
  • ペイロード
  • の署名
  • ✔ JWTによるRESTful APIのビルド


    まず「JWT」という名前のフォルダーを作成し、プロジェクトの構造を見てみましょう

    次に、JWTディレクトリの下でコマンドラインを開き、このコマンドを書きます
    npm install --save  express body-parser morgan jsonwebtoken 
    

    1 -インデックス。js


    const express = require('express'),
        bodyParser = require('body-parser'), 
        jwt = require('jsonwebtoken'),
        config = require('./configurations/config'),
        cors = require('cors'),
        app = express();
    
    //set secret
    app.set('Secret', config.secret);
    
    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: true }));
    
    // parse application/json
    app.use(bodyParser.json());
    
    app.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
    app.get('/', function (req, res) {
        res.send('App is running on http://localhost:3000/');
    });
    

    2 -設定/設定。js


    module.exports = {
        secret: "heymynameisminh"
    }
    
    さて、EverthingがOKであるかどうかチェックしてください😃 このコマンド行を実行します.
    node index.js
    

    ❗️ Make sure that you are standing in the right directory to run index.js file (following our project structure)


    あなたのブラウザをhttp://localhost:3000/で開きます

    よくできた!万事うまくいく.行き続ける

    認証システムの設定


    データベース内のユーザ名とパスワードを「techx」と「123」とし、このコードをインデックスに書き込みます.jsファイル
    app.post('/authenticate', function (req, res) {
        console.log(req.body);
        if (req.body.username !== "techx") res.json({ message: "user not found!" });
        if (req.body.password !== "123") res.json({ message: "please check your password!" });
        const payload = {
            check: true
        }
        let token = jwt.sign(payload, app.get('Secret'), {
            expiresIn: 14000
        });
        res.json({
            message: 'authentication done',
            token: token
        });
    });
    
    さあ、郵便配達人でテストしましょう

    パーフェクト!😃 私たちはHTTPリクエストをサーバーに送りました.今のところ、クライアントは既にトークンを持っていました.次のステップに進みましょう
    const ProtectedRoutes = express.Router();
    app.use('/api', ProtectedRoutes);
    
    ProtectedRoutes.use((req, res, next) => {
        let token = req.headers['access-token'];
        console.log(token);
        if (!token) res.send({ message: 'No token provided.' });
        jwt.verify(token, app.get('Secret'), (err, decoded) => {
            if (!err) { req.decoded = decoded; next(); }
            return res.json({ message: 'invalid token' });
        })
    });
    
    ProtectedRoutes.get('/getAllProducts', (req, res) => {
        let products = [
            {
                id: 1,
                name: "cheese"
            },
            {
                id: 2,
                name: "carottes"
            }
        ]
        res.json(products)
    });
    
    すべてのデータを取得する2つの異なる方法を比較している
    トークンによる


  • トークン
  • なしで