我正在编写一个nodejs应用程序,我想将其用作Web应用程序以及API提供程序。一旦用户通过身份验证,我想为该用户分配一个令牌,用于后续请求。这适用于Web应用程序的护照,因为我只是在会话中使用令牌序列化和反序列化用户。但是,在响应API请求时,没有设置cookie来存储会话信息。理想情况下,护照会在会话和请求正文中查找令牌。有没有办法配置护照来完成这个?
答案 0 :(得分:127)
只需在每个请求上使用访问令牌。不需要使用会话。以下是工作流程:
POST /signin
/signin
。当客户端从授权服务器接收访问令牌时,它可以向服务器上的受保护资源发出请求。例如:
GET /api/v1/somefunction?token='abcedf'
<强>参考强>
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
}
})