我们正在运行一个典型的 MEAN 设置 - Angular 用于前端渲染,node.js (express) 作为服务器。静态 HTML/Javascript 资产从节点提供,无需身份验证。前端显示的所有数据都是 Angular 从节点请求的。Angular 通过在 ajax 请求的“授权”标头中提供不记名 JWT 令牌来针对节点端点授权用户。
这非常有效,但是当涉及到此设置中的 Google API OAuth2 集成时,我处于死胡同。目标是在 webapp 中显示用户的日历数据:
- Angular 从在请求标头中提供不记名令牌的节点请求/api/calendars。
- 如果服务器还没有该用户的 Google 访问令牌,它会创建一个 Google 令牌请求 URL(包括 callbackUrl /api/calendars/googleCallback )并将其发送回 Angular。
- 当 Angular 收到一个 tokenRequest-Url 作为响应而不是日历数据时,它会将用户重定向到这个 URL,在那里他手动授予 webapp 权限。
- Google 重定向到提供访问代码的回调 URL。
问题是第 4 步 - 因为节点服务器是无状态的,并且从 Google 到/api/calendars/googleCallback?code=XYZ的重定向不包含服务器无法识别的授权标头,更不用说验证提供的访问代码所属的用户了。
由于 Google 只接受预先指定的固定回调 URL,因此向回调 URL 动态添加某种标识用户的哈希是行不通的(而且似乎很不安全)。我可以将用户标识存储在 cookie 中,但这感觉就像违反了整个 JWT 方法。
问题是,如果上述流程通常是一个坏主意,或者是否有最佳实践来处理这种情况,以允许后端识别回调请求属于哪个用户。
谢谢!