首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无状态REST服务器上的Google回调

无状态REST服务器上的Google回调
EN

Stack Overflow用户
提问于 2014-11-14 14:25:49
回答 1查看 644关注 0票数 0

我们正在运行一个典型的平均设置-角的前端渲染,node.js (表示)作为服务器。静态HTML/Javascript资产是从节点提供的,不需要身份验证。显示在前端的所有数据都是由角节点请求的。通过在ajax请求的“授权”报头中提供一个承载JWT令牌,ajax授权用户对节点端点进行授权。

这是完美的,但当涉及到Google OAuth2在这个设置中的集成时,我处于死胡同。目标是在webapp中显示用户的日历数据:

  1. 在请求头中提供承载令牌的节点的角度请求/api/日历。
  2. 如果服务器还没有为该用户提供Google令牌,则会创建一个(包括callbackUrl /api/calendars/googleCallback ),并将其发送回Angular。
  3. 当角接收到令牌response URL作为响应而不是日历数据时,它会将用户重定向到这个URL,他在那里手动授予webapp权限。
  4. Google重定向到提供访问代码的回调Url。

问题是第4步--由于节点服务器是无状态的,而且从Google重定向到/api/calendars/googleCallback? code =XYZ不包含授权头,服务器无法识别,更不用说验证提供的访问代码所属的用户了。

动态添加某种类型的哈希标识用户到回调URL不起作用(而且看起来很不安全),因为Google只接受预先指定的固定回调URL。我可以将用户标识存储在cookie中,但这似乎违反了整个JWT方法。

问题是,上面描述的流通常是个坏主意,还是有最佳做法来处理这种情况,以允许后端识别回调请求属于哪个用户。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-14 19:58:30

好吧-忽略了直接的解决方案:

在标记查询中使用状态 param,该查询是Google路由并附加到callbackurl:https://developers.google.com/accounts/docs/OAuth2Login#state-param的。

在节点中:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26932180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档