nodejs护照身份验证令牌

时间:2013-07-01 03:27:56

标签: node.js authentication express passport.js

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

3 个答案:

答案 0 :(得分:127)

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

POST /signin
  1. 用户名和密码将在客户请求中发布。
  2. 服务器使用护照的本地策略对用户进行身份验证。见passport-local
  3. 如果凭据代表有效用户,则服务器返回由某个生成器生成的访问令牌。 node-jwt-simple是个不错的选择。
  4. 如果凭据无效,请重定向至/signin
  5. 当客户端从授权服务器接收访问令牌时,它可以向服务器上的受保护资源发出请求。例如:

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

    1. 客户端使用token参数调用某个服务器api。
    2. 服务器使用护照的承载策略对令牌进行身份验证。见passport-http-bearer
    3. <强>参考

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

答案 1 :(得分:7)

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

这是另一种易于遵循的选择(但它会使用会话)。可能是一个很好的交叉引用: http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local

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

答案 2 :(得分:0)

您可以在nodejs的护照中使用isAuthenticated()方法。在每条路由上,您都可以检查if(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
    }
})