提问者:小点点

NodeJS护照认证令牌


我正在编写一个nodejs应用程序,我想将其用作Web应用程序以及API提供者。用户通过身份验证后,我想为该用户分配一个令牌,用于后续请求。这适用于 Web 应用程序的 passport ,因为我只是在会话中使用令牌序列化和反序列化用户。但是,在响应 API 请求时,没有要设置的 cookie 来存储会话信息。理想情况下,护照将在会话和请求正文中查找令牌。有没有办法配置护照来完成此操作?


共3个答案

匿名用户

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

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

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

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

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

引用

使用护照.js和.js快递(node.js)制作安全的身份验证 API

匿名用户

正如 bnuhero 提到的,你不需要会话(尽管这种方法也有其优点)。这是我为此开始的一个样板项目:https://github.com/roblevintennis/passport-api-tokens

这是一个替代且易于遵循的 tut(但它确实使用会话)。可能是一个很好的交叉引用: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() 方法。在每个路由上,您可以检查if(req.isAuthenticated()),如果它已经通过身份验证,它将允许您访问该路由,或者您可以在else块中重定向或执行任何其他执行。在 Passport 中,您可以返回 done(null,用户)以成功登录,它会将数据存储在 cookie 中,直到会话结束。在用户中,您可以提供有关用户的信息,例如电子邮件,密码。

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