2013-07-01 152 views
65

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

回答

124

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

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

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

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

  1. 客户端调用与令牌参数一些服务器API。
  2. 服务器通过使用护照的载体策略来验证令牌。见passport-http-bearer

参考

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

+1

谢谢SOOOOO多本。出于某种原因,我认为OAuth需要比这更复杂。 – SomethingOn

+1

很好的解释 – Omar

+1

关于令牌生成,有一个永不过期的令牌是安全的吗?我必须让令牌过期并生成新的吗? – sanfilippopablo

7

由于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/