我们正在运行一个典型的平均设置-角的前端渲染,node.js (表示)作为服务器。静态HTML/Javascript资产是从节点提供的,不需要身份验证。显示在前端的所有数据都是由角节点请求的。通过在ajax请求的“授权”报头中提供一个承载JWT令牌,ajax授权用户对节点端点进行授权。
这是完美的,但当涉及到Google OAuth2在这个设置中的集成时,我处于死胡同。目标是在webapp中显示用户的日历数据:
问题是第4步--由于节点服务器是无状态的,而且从Google重定向到/api/calendars/googleCallback? code =XYZ不包含授权头,服务器无法识别,更不用说验证提供的访问代码所属的用户了。
动态添加某种类型的哈希标识用户到回调URL不起作用(而且看起来很不安全),因为Google只接受预先指定的固定回调URL。我可以将用户标识存储在cookie中,但这似乎违反了整个JWT方法。
问题是,上面描述的流通常是个坏主意,还是有最佳做法来处理这种情况,以允许后端识别回调请求属于哪个用户。
谢谢!
发布于 2014-11-14 19:58:30
好吧-忽略了直接的解决方案:
在标记查询中使用状态 param,该查询是Google路由并附加到callbackurl:https://developers.google.com/accounts/docs/OAuth2Login#state-param的。
在节点中:
var googleApi = require('googleapis');
var oauth2Client = new googleApi.auth.OAuth2(config.clientId, config.clientSecret, config.callbackUrl);
var options = {
access_type: 'offline',
state: 'hashed-useridentified',
scope: [
'https://www.googleapis.com/auth/calendar.readonly'
].join(' ')
};
oauth2Client.redirectUri_ = 'http://someserver.com/api/auth/google/calendar/callback';
var generatedUrl = oauth2Client.generateAuthUrl(options);https://stackoverflow.com/questions/26932180
复制相似问题