内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/13933980/make-a-secure-oauth-api-with-passport-js-and-express-js-node-js
我有一个特定的问题,除非我没有以正确的方式做事情.
我有两个应用程序,一个客户端(html站点)和一个API(用快速 mongodb 构建). API将需要安全访问.他们都在不同的领域,现在让我们的网站在domain.com上,我的API在api.com:3000.
我在使用数据创建用户时,添加了护照以获取Github的访问令牌,所以我可以使用“Github”登录.
我目前的过程是:
1)客户端(站点)在API上打开弹出窗口
window.open("http://api.com:3000/oauth")
2)快递服务器,启动护照过程:
app.get('/oauth', passport.authenticate('github'), function(req, res) { });
对于策略,我用了 this code .
3)我将回调重定向到关闭弹出窗口的url(带有window.close()的javascript):
app.get('/oauth/callback', passport.authenticate('github', { failureRedirect: '/' }), function(req, res) { res.redirect('/auth_close'); });
在这一点上,一切都很好,我现在已经登录了API.我的问题是如何获取数据回到客户端,因为客户端还不了解accessToken,user或user id.
所以,从客户端(打开弹出窗口的网站),我尝试了不同的方法:
从弹出窗口获取值:由于重定向不起作用,我忘了弹出JavaScript信息
调用我的API来获取会话中的“当前用户”,如 http://api.com:3000/current
再一个请求,不理想,但这一个工作.但是,我还是有一个问题.
如果我从浏览器到达这个/当前url返回用户,因为浏览器在头文件中发送快速会话cookie:
Cookie:connect.sid=s%3AmDrM5MRA34UuNZqiL%2BV7TMv6.Paw6O%2BtnxQRo0vYNKrher026CIAnNsHn4OJdptb8KqE
问题是我需要从jquery或类似的请求,这是失败的地方,因为会话没有发送.所以用户没有返回:
app.get('/current', function() { // PROBLEM HERE, req.user is undefined with ajax calls because of the session! });
我找到了一种使其工作的方式,但我不高兴,因为我会有跨浏览器的CORS问题,它正在添加来表达:
res.header("Access-Control-Allow-Credentials", "true");
并在jquery ajax调用中添加withCredentials字段,如 here 所述.
要在本机XHR对象上设置的fieldName-fieldValue对的映射.例如,如果需要,您可以使用它将跨域请求的Credentials设置为true.
$.ajax({ url: a_cross_domain_url, xhrFields: { withCredentials: true } });
我也不满意,因为我丢失了我的标题上的通配符:Access-Control-Allow-Origin,我需要指定一个域,如 here 所述.
所以,我不知道我应该采取的方法,我唯一需要的是客户端获取accessToken或从护照oauth进程返回的userID.这个想法是在API的每次调用中使用该标记来验证调用.
任何线索?
我遇到过同样的问题.我在登录页面上使用本地策略,然后检查用户是否在其他请求的会话中.
正如你所说,解决方案是使用CORS,以便使用XMLHTTPRequest在cookie中传递会话ID.
不用使用在所有浏览器上还没有工作的CORS,我勉强使用对其他请求的访问令牌.我使用的工作流程如下:
POST /login
>用户名和密码在身体中传递.
>使用本地策略的身份验证.
> Response返回用户对象,包括access_token
GET / endpoint / abc123?access_token = abcdefg
>从登录响应获得的令牌
>使用承载策略进行认证(在护照http-bearer中)
Express现在不需要会话.
我希望这个替代方案有所帮助.
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/13933980/make-a-secure-oauth-api-with-passport-js-and-express-js-node-js
以上所述就是小编给大家介绍的《使用passport.js和express.js(node.js)创建一个安全的oauth API》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 使用Libvirt创建虚拟机
- 如何使用PHP使用FPDF创建这样的表?
- 使用 IDEA 创建 EJB 工程
- 使用 IDEA 创建 EJB 工程
- 使用Docker创建Elasticsearch服务
- c# – 使用队列创建BackgroundWorker
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Rework
Jason Fried、David Heinemeier Hansson / Crown Business / 2010-3-9 / USD 22.00
"Jason Fried and David Hansson follow their own advice in REWORK, laying bare the surprising philosophies at the core of 37signals' success and inspiring us to put them into practice. There's no jarg......一起来看看 《Rework》 这本书的介绍吧!