Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js expressJS应用程序中的身份验证_Node.js_Express_Express Jwt - Fatal编程技术网

Node.js expressJS应用程序中的身份验证

Node.js expressJS应用程序中的身份验证,node.js,express,express-jwt,Node.js,Express,Express Jwt,我想在expressJS应用程序中使用JWT实现身份验证。 在谷歌搜索了一些网站后,我了解了JWT的概念,但我无法使用expressJS实现JWT。 我没有在expressJS中得到任何JWT的确切示例。 我已经阅读了节点模块的说明,但我的问题是如何生成JWT以及如何为每个请求验证收到的JWT。 具体流程是什么: 生成JWT 解码JWT 验证JWT 另外,在下面的示例中,秘密的含义是什么: 你需要使用这个软件包。expressjwt包帮助您在使用ExpressJS框架时保护部分API 密

我想在expressJS应用程序中使用JWT实现身份验证。
在谷歌搜索了一些网站后,我了解了JWT的概念,但我无法使用expressJS实现JWT。
我没有在expressJS中得到任何JWT的确切示例。
我已经阅读了节点模块的说明,但我的问题是如何生成JWT以及如何为每个请求验证收到的JWT。
具体流程是什么:

  • 生成JWT
  • 解码JWT
  • 验证JWT

    另外,在下面的示例中,秘密的含义是什么:

  • 你需要使用这个软件包。
    expressjwt
    包帮助您在使用ExpressJS框架时保护部分API

    密码很像密码。它对有效载荷进行编码,以便敏感信息可以在JWT中传递,而无需操纵。它确保身份验证机制没有被更改,因此服务器可以信任该用户

    注意:在某些情况下,您会看到使用RS256算法编码的JWT。这将需要提供公钥/私钥对来验证和解码JWT

    生成

    sign()
    函数在
    jsonwebtoken
    中执行此操作。如果您使用该软件包,您将使用
    encode()

    您可以使用任何密码对JWT进行签名,但必须使用相同的密码才能使用
    verify()

    假设您有以下JSON对象,您想要创建JWT:

    var json = { user: 'jdoe',
        firstName: 'John',
        lastName: 'Doe',
        id: 1
    };
    
    var token = jwt.sign(json, 'superSecretSquirrel');
    
    您的签名/编码令牌现在看起来像:

    eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiamRvZSIsImZpcnN0TmFtZSI6IkpvaG4iLCJsYXN0TmFtZSI6IkRvZSIsImlkIjoxLCJpYXQiOjE0MzI3NjU3NzJ9.4mowMfRKIENnAKtRdDkj-BZZqAS8_b0eS3nj5qvEu9Q
    
    您可以在进行验证(确保提供此处给出的秘密)

    验证和解码

    verify()
    函数异步执行此操作。它在回调中返回的对象是解码的JWT。为了验证JWT,需要将机密传递给函数

    假设“超级秘密松鼠”的秘密如上所示:

    var jwt = require('jsonwebtoken');
    
    jwt.verify(token, 'superSecretSquirrel', function (err, decoded) {
        if (err)
            console.error(err);
    
        // Show the decoded JWT
        console.log(decoded);
    });
    
    解码的令牌将显示为:

    { user: 'jdoe', firstName: 'John', lastName: 'Doe', id: 1, iat: 1432765772 }
    
    其中,令牌中的
    iat
    是一个表示“在”发出的

    现在让我们参考您的示例(我省略了函数并替换了秘密):


    这只允许访问路径
    /protected
    ,前提是您有一个用秘密“superSecretSquirrel”签名的JSON Web令牌。如果你有一个与密码不匹配的令牌,你会得到一个
    未授权的错误
    ,你会想抛出一个HTTP 401。

    express jwt
    只对令牌进行解码/验证,生成由类似的包来完成。机密应该与生成令牌的机密相匹配。
    { user: 'jdoe', firstName: 'John', lastName: 'Doe', id: 1, iat: 1432765772 }
    
    var expressJWT = require('express-jwt');
    // Assume app = express();
    
    app.get('/protected',
        expressJWT({
            secret: 'superSecretSquirrel'
        }), 
        ...
    );