开发者社区> 烟海之蓝> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

nodejs + express + jwt token鉴权登录用例

简介: 导语 token鉴权登录的优势:无状态、可以跨域、可以防止csrf、性能好(每次请求不用去服务器查询相应的session),客户端只需要将token存入本地,每次访问服务端headers加上token即可 实现 安装jwt npm install jsonwebtoken --save 生成...
+关注继续查看

导语

token鉴权登录的优势:无状态、可以跨域、可以防止csrf、性能好(每次请求不用去服务器查询相应的session),客户端只需要将token存入本地,每次访问服务端headers加上token即可

实现

  1. 安装jwt npm install jsonwebtoken --save
  2. 生成一对RSA秘钥(用来加密)用openssl来创建RSA256密钥对

    进入项目内任意指定目录:输入openssl,如下
    ▶ openssl
    OpenSSL> genrsa -out jwt.pem 1024                        
    Generating RSA private key, 1024 bit long modulus
    ....++++++
    .......................++++++
    e is 65537 (0x10001)
        
    OpenSSL> rsa -in jwt.pem -pubout -out jwt_pub.pem
    writing RSA key
    OpenSSL> exit
    ls 
    jwt.pem       jwt_pub.pem 
  3. 登录接口上添加生成token方法

    login.createToken = (req, res, next) => {
        let result = req.body.result
        let cert = fs.readFileSync(path.resolve(__dirname, '../../lib/rsa/jwt.pem'))
        let token = jwt.sign({
            _id: result._id,
            name: result.name
        }, cert, {
            algorithm: 'RS256',
            expiresIn: '1h'
        })
        result.token = token
        return common.send(req, res, {status: 0, msg: '登录成功!', data: result})
    }

    algorithm:加密算法方式
    expiresIn:Eg: 60, "2 days", "10h", "7d". A numeric value is interpreted as a seconds count. If you use a string be sure you provide the time units (days, hours, etc), otherwise milliseconds unit is used by default ("120" is equal to "120ms").(官方解释)

  4. 在路由 router.use 方法内添加校验token方法

    function checkToken(req, res, next) {
      let token = req.headers.token
      let cert = fs.readFileSync(path.resolve(__dirname, '../lib/rsa/jwt_pub.pem'))
      try {
        const decoded = jwt.verify(token, cert);
        next()
      } catch (e) {
        res.status(401)
        res.send(e)
      }
    }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JWT如何解析过期的token中的信息
JWT如何解析过期的token中的信息
0 0
PHP使用jwt生成token,做api的用户认证firebase/php-jwt
PHP使用jwt生成token,做api的用户认证firebase/php-jwt
0 0
PHP实现JWT lcobucci/jwt生成jwt token
PHP实现JWT lcobucci/jwt生成jwt token
0 0
一文带你了解CSRF、Cookie、Session和token,JWT之间的关系
1.Cookie和Session兄弟 由于HTTP协议本身是无状态的,也就是说同一个用户前一次HTTP请求和后一次HTTP请求时相互独立的,无法判断后一次请求的用户是不是刚才的用户。为了记录用户的状态,才有了Cookie。Cookie实际上以key-value键值对的形式存储了一些文本信息数据,它将数据保存在客户端(浏览器)。
0 0
【SpringBoot】46、SpringBoot中整合JWT实现Token验证(拦截器篇)
上篇文章我们已经实现了使用自定义注解验证 token 信息,这样我们就会发现,当我们需要验证的接口较多时,我们需要每个方法上面都加上 @JwtToken 这个注解,也是非常麻烦, 本片文章,我们继续使用拦截器来实现 token 信息的验证
0 0
【SpringBoot】45、SpringBoot中整合JWT实现Token验证(注解篇)
上篇文章,我们已经在 SpringBoot 中整合了 JWT 并实现了 Token 验证,那我们在实际应用中就会发现,如果每个 视图层(controller)都手动验证 token,代码就会显得特别臃肿,本篇文章主要为了解决该问题。
0 0
【SpringBoot】44、SpringBoot中整合JWT实现Token验证(整合篇)
Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519),该 token 被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。
0 0
JWT 登录认证 + Token 自动续期方案,写得太好了!
JWT 登录认证 + Token 自动续期方案,写得太好了!
0 0
【在线教育项目】整合JWT权限校验,登录成功生成token
【在线教育项目】整合JWT权限校验,登录成功生成token
0 0
Java:SpringBoot集成JWT实现token验证
Java:SpringBoot集成JWT实现token验证
0 0
+关注
烟海之蓝
程序设计之道,无远弗界,御晨风而返
文章
问答
文章排行榜
最热
最新
相关电子书
更多
安全机制与User账户身份验证实战
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载