我正在编写一个nodejs应用程序,它既可以用作web应用程序,也可以用作API提供者.一旦用户通过身份验证,我想为该用户分配一个令牌,用于后续请求.这对web应用程序的passport非常有用,因为我只是在会话中用令牌序列化和反序列化用户.但是,在响应API请求时,没有设置cookie来存储会话信息.理想情况下,passport将在会话和请求主体中查找令牌.有没有办法配置passport来实现这一点?

推荐答案

只需在每个请求上使用访问令牌.不需要使用会话.以下是工作流程:

POST /signin
  1. 用户名和密码将发布在客户端请求中.
  2. 服务器使用passport的本地策略对用户进行身份验证.见passport-local.
  3. 如果凭据代表有效用户,服务器将返回由某个生成器生成的访问令牌.node-jwt-simple是个不错的 Select .
  4. 如果凭据无效,请重定向到/signin.

当客户端从授权服务器接收到访问令牌时,它可以向服务器上受保护的资源发出请求.例如:

GET /api/v1/somefunction?token='abcedf'

  1. 客户端使用token参数调用一些服务器api.
  2. 服务器使用passport的承载策略对令牌进行身份验证.见passport-http-bearer.

References

Make a secure oauth API with passport.js and express.js (node.js)

Node.js相关问答推荐

monorepo内的NPM包使用不在注册表中的本地包

为高流量网站优化Node.js实时通知服务

Mongoose更新在^8.0.3版中,许多似乎不能按预期工作

如何从基于JSON的HTML/SCSS模板生成PDF?

如何在docker容器上正确安装nodejs?

Node.js 连接在查询完成之前终止

为什么 docker 容器内的应用程序无法访问它自己的 API 端点?

TS[2339]:类型 '() => Promise<(Document & Omit) | 上不存在属性空>'

在mongoose虚拟属性中处理异步操作

Amplify 部署的应用程序出现TypeError: handler is not a function错误,但它在本地运行

我正在try 在公共目录中使用 Express.js 项目部署 Angular 静态构建

Cloudflare 522 错误 - javascript 客户端连接到 node 服务器

在 linux mint 上部署 node 应用程序的最简单方法是什么?

在express js模型中将js转换为Typescript 时Typescript 错误

如何在 Node.js 的 console.log() 中创建换行符

mongoose 模式中的嵌套对象

如何运行用 TypeScript 编写的 Mocha 测试?

Meteor - collection.find() 总是返回所有字段

响应分块时获取整个响应正文?

找不到在 docker compose 环境中运行的 node js 应用程序的模块