Nodejs 护照认证令牌

我正在编写一个 nodejs 应用程序,我希望既作为一个 Web 应用程序使用,也作为一个 API 提供者。一旦对用户进行了身份验证,我想为该用户分配一个令牌,以便用于后续请求。这对 Web 应用程序的“护照”非常有用,因为我只是用会话中的令牌对用户进行序列化和反序列化。但是,在响应 API 请求时,不需要设置 Cookie 来存储会话信息。理想情况下,护照将在会话和请求机构中寻找令牌。是否有办法配置护照来实现这一点?

46690 次浏览

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

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

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

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

  1. 客户机使用令牌参数调用某个服务器 api。
  2. 服务器通过使用护照的持有者策略对令牌进行身份验证。

参考文献

使用 passport.js 和 Express.js (node.js)创建一个安全的 oauth API

正如 bnuHero 提到的那样,您不需要会话(尽管这种方法也有其优点)。下面是我正在开始的一个基础项目: Https://github.com/roblevintennis/passport-api-tokens

这里有一个替代方案,很容易跟踪 tut (但它确实使用 session) ,可能是一个很好的交叉参考: Http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local

还有一个相关的参考: Http://mherman.org/blog/2013/11/11/user-authentication-with-passport-dot-js/

您可以在 nodejs 中护照中使用 isAuthenticated ()方法。对于每个路由,您可以检查是否(req.isAuthenticated ()) ,如果它已经通过身份验证,它将允许您访问路由,或者您可以在 else 块中重定向或执行任何其他任何执行。在 Passport 中,如果成功登录,您可以返回 done (null,user) ,它会将数据存储在 cookie 中,直到会话结束。在用户中你可以获得有关用户的信息,如电子邮件、密码等。

app.get('/home', (req, res) =>{
if(req.isAuthenticated()){
//render home page
} else {
// go back to the login page or throw soome error
}
})