likes
comments
collection
share

Passport.js 的工作原理简介

作者站长头像
站长
· 阅读数 17

Passport

Passport 是在 Node 的 Web 框架中使用的身份验证库。起初它专为 Express 设计,经过扩展之后,它可以在 Koa,Egg,Nest 等主流框架中使用。

Passport 的设计类似于 Koa。Koa 只提供了核心的中间件机制和 HTTP 服务的创建,要处理请求,开发者需要自己导入第三方中间件模块,和自己手写处理请求的路由中间件。

Passport 本身只提供验证机制,也就是验证成功了如何,验证失败了又如何,至于如何验证,交给具体的验证策略 Strategy 去实现。也就是说,要使用 Passport 做身份认证,至少引入两个模块:passport.js 和要使用的策略模块,比如 passport-local ,或者 passport-jwt 模块。

passport-local

Passport-local 是本地策略验证模块,也就是最经典的通过用户名和密码的方式来验证用户身份。通常客户端的登录接口,会通过请求体来传递用户名和密码,passport-local 默认就会从请求体中解析 usernamepassword 两个字段交给开发者去验证此用户的身份。当然,如果客户端传递的是 emailpasspord子弹,只需要通过简单的配置,passport-local 一样能够读取到。

passport-jwt

Passport-jwt 是验证 JsonWebtoken 的策略模块。客户端传递 token 有多种方式,通过cookie,通过各式各样的请求头,它内部设置了多种获取token的方式,可以方便的从请求对象中拿到 token,之后会使用引入的 jsonwebtoken来做 token 的校验和解析,并将解析后的 payload 放到 request.user 上,交给用户去使用。

Passport 的作用

在以上策略的工作流程中,Passport 只起到一个管理的作用,主要通过以下两个方法:

  • passport.use:注册策略,类似于 Vue 中的 Vue.use 注册插件一样,Passport 先完成策略的初始化工作,再把策略保存到 _strategies 数组中。
  • passport.authenticate:应用策略,并返回一个中间件。也就是从 _strategies 数组中找到对应的策略,来对请求中的用户信息进行认证。

小结

本文简单介绍了 Passport 这个身份认证库的工作原理和适用方式,具体的使用示例可以参考官网或者其他文章。后面会再更新一篇 Nest 中使用 Passport 来做身份认证的文章,到时候会详细介绍 Passport 的用法,以及策略的内部实现,以及守卫是如何利用策略来完成拦截的。

感谢阅读 🍔

转载自:https://juejin.cn/post/7221422131857408055
评论
请登录