Node.js 如何实现oauth/授权令牌流的无状态管理

Node.js 如何实现oauth/授权令牌流的无状态管理,node.js,oauth,Node.js,Oauth,我正在使用Node.js实现一个api,但答案可能是可以用一种与语言无关的方式来回答 给定如下所示的授权流url: https://auth.example.com/oauth/authorize?client_id=client_id&redirect_uri=callback_url&response_type=response_type&state=nonce 我想通过api执行这个流 将用户从应用程序(如本机移动或web spa)重定向到 api端点/{thi

我正在使用Node.js实现一个api,但答案可能是可以用一种与语言无关的方式来回答

给定如下所示的授权流url:

https://auth.example.com/oauth/authorize?client_id=client_id&redirect_uri=callback_url&response_type=response_type&state=nonce
我想通过api执行这个流

  • 将用户从应用程序(如本机移动或web spa)重定向到 api端点
    /{third\u party\u oauth\u privider}/token
    (此api是构建的 (由我负责)
  • 第一步的重定向附带一个用于 访问我正在构建的api(提供用户身份等)
  • 我需要通过类似于 在上面的一个例子中,一旦用户在与第三方oauth提供者进行身份验证后按下“允许”,用户将被重定向回我正在构建的api中的端点。此时,我需要能够将授权上下文(令牌和允许的第三方用户数据)与系统中的用户相关联从api的角度来看,我希望以无状态的方式执行此操作。
像passport这样的库似乎是通过会话状态来实现的,但我不希望api中有会话(即使只是针对这一个用例)。我可以利用nonce,将其与系统中的用户配置文件信息一起写入,并从回调上的state参数中查找nonce以查找关联的用户,而无需在api中维护任何状态。。。但这似乎很奇怪

处理这种情况的oauth兼容方式是什么?我真的需要为这个流维护一个会话状态才能工作吗?如果是这样的话,这种规模将如何?我是否需要将该会话状态存储在Redis中,以确保回调api实例具有该会话状态?必须有一个相当优雅的解决方案,它不需要状态,也可能不需要状态


如果您有任何建议/示例/链接等,我们将不胜感激。

此答案可能有助于您的决策:@vm909-如果我处理的是web应用程序,我会购买更多,但这是一个api。使用分布式缓存实现会话状态以支持此会话状态似乎。。。有点疯狂,但也许必须这样做:耸耸肩:。。。不管怎样,谢谢你的链接。哦,完全感谢。我应该把我的评论写得更好;我并不是想暗示这个链接会回答你的确切问题。但是这里有很多很好的讨论,似乎与您的问题相关。@vm909-我对它研究得越多,您就越需要管理一个流,比如我用state描述的流:(