【问题标题】:Stateless Authentication Library in NodeJSNodeJS 中的无状态身份验证库
【发布时间】:2013-08-12 15:59:57
【问题描述】:

我相信 RESTful API 的最佳实践是无状态。我读了一点关于无状态身份验证的文章,但并不完全清楚如何实现它(看起来像一堆乱七八糟的令牌等)。 PassportJS 是一个不错的身份验证库,但它不是无状态的?是否有某种库可以帮助我创建无状态 API(带有身份验证)?我会想使用像 Google、Twitter 等这样的 SSO(单点登录),所以如果库为我处理它会很好(就像 PassportJS 那样)。

【问题讨论】:

  • 当您说无状态时,我假设您的意思是没有在服务器端存储有关用户的会话信息。如果需要,可以使用 connect/express 库提供的 cookiesession 中间件。可能这就是您想要的,但您能否详细说明您对无状态身份验证的解释,以便我提供帮助。
  • @user568109,你是对的,无状态意味着服务器上没有会话信息。 cookiesession 看起来像我需要的,但我仍然需要弄清楚身份验证部分。 PassportJS 一个很棒的身份验证库使用会话,想知道它是否可以使其与cookiesession 一起使用或以某种方式使 PassportJS 无状态?

标签: node.js authentication single-sign-on stateless passport.js


【解决方案1】:

我目前正在开发一个 REST API 并使用 PassportJS Basic Auth(用于开发目的),没有会话。您可以告诉策略不使用会话:

passport.authenticate( 'basic', { 'session' : false } )
passport.authenticate( 'bearer', { 'session' : false } )
passport.authenticate( 'token', { 'session' : false } )

见底部here

【讨论】:

  • 我对此有点陌生。如果我希望用户通过第三方(例如 Google、GitHub 等)进行身份验证,我相信它们也使用 OAuth 2,我该如何配置呢?提供者(Google、Facebook、Twitter)与 API(Basic、OAuth、OAuth 2)有何关系?
【解决方案2】:

@fakewaffle 是对的。您可以通过将 session 设置为 false 来使护照无国籍。

我使用 oauth2rize 开发了一个 Oauth2 服务器。 https://github.com/jaredhanson/oauth2orize/。 我使用它向客户端提供访问令牌,然后将其与authorization 标头中的每个请求一起发送。这些令牌存储在数据库中,因此是无状态的。

您当然可以使用其他提供商来验证用户身份并向客户端提供访问令牌。

Passport.js 提供多个身份验证提供程序,可用于通过 facebook、twitter 等第三方提供程序进行身份验证。 这是 facebook auth provider http://passportjs.org/guide/facebook/ 的链接。

这是否回答了这个问题,或者您还有其他想做的事情吗?

【讨论】:

  • oauth2orize 是我想创建 OAuth 提供者时可以使用的东西吗?如果我想允许我的用户通过 Google/GitHub/etc 登录/注册,我将使用各自的 PassportJS 提供商,对吗?如果是这样,我想让它们无国籍,那应该如何工作?它没有记录,所以我可以使用:passport.authenticate( 'google', { 'session' : false } )?
  • 另外,“令牌存储在数据库中,因此是无状态的”:所以我可以使用 redis-sessions 而无需更改 PassportJS 方面的代码,一切都会成为“无国籍”?
  • 是的,我觉得你可以用redis-sessions,虽然我自己没用过redis。是的,oauth2rize 用于创建您自己的 OAuth 提供程序。另外你能解释一下你所说的无国籍到底是什么意思,所以我可以更有信心地回答。
猜你喜欢
  • 2011-11-12
  • 2020-05-16
  • 2015-06-24
  • 2014-02-12
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多