内容简介:代码日志版权声明:翻译自: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
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
解构产品经理:互联网产品策划入门宝典
电子工业出版社 / 2018-1 / 65
《解构产品经理:互联网产品策划入门宝典》以作者丰富的职业背景及著名互联网公司的工作经验为基础,从基本概念、方法论和工具的解构入手,配合大量正面或负面的案例,完整、详细、生动地讲述了一个互联网产品经理入门所需的基础知识。同时,在此基础上,将这些知识拓展出互联网产品策划的领域,融入日常工作生活中,以求职、沟通等场景为例,引导读者将知识升华为思维方式。 《解构产品经理:互联网产品策划入门宝典》适合......一起来看看 《解构产品经理:互联网产品策划入门宝典》 这本书的介绍吧!