Oauth + SPA + API 后端
Posted
技术标签:
【中文标题】Oauth + SPA + API 后端【英文标题】:Oauth + SPA + API backend 【发布时间】:2019-06-15 05:07:07 【问题描述】:我正在设置一项服务,该服务需要授权现有的 Gitlab 作为 OAuth 提供者。 该服务是一个 SPA,由开发模式下的 webpack 开发服务器和生产模式下的 nginx 服务器提供服务。 我还设置了一个外部 API,它应该处理数据库并向给定的 gitlab 实例发出请求(例如 pull repos)。
我的 SPA 正在使用implicit_grant 流对 Gitlab OAuth 进行授权,并且正在获取访问令牌。目前,我在重定向到我的 API 后端后将 access_token 传递给我,在那里我通过对带有 access_token 的 gitlab 实例的请求获得了 Gitlab 用户 ID 和用户名。有了这些,我生成了一个 jwt 并将其发送到客户端 (SPA) 并将其保存在那里,以便我可以使用此 JWT 授权我的 API。 我将如何处理后端中的初始 access_token(因为我需要令牌来进行 gitlab 调用)? 目前我正在考虑将其写入数据库中的用户并在每次他提出请求时获取用户(正常护照流程),所以我也有令牌。但是如果令牌失效或过期怎么办? 我是否应该在后端使用拦截器并且如果令牌无效(gitlab 会给我一个 401)将 401 重定向到我的客户端,让他获取一个新令牌并将其传递回后端,生成一个新的 JWT,发送这个再次发给客户,让他做与原始请求相同的请求(也通过拦截器)? 或者我应该只是将 401 重定向到我的客户,让他获得一个新令牌,让他将此令牌发布到例如 /renewToken 并将令牌保存到数据库并使用旧的 JWT?
希望有人能帮助我理解这个流程。
【问题讨论】:
【参考方案1】:Credential Management API 应该是您在客户端上寻找的内容。这将检索 id 和访问令牌,您可以将访问令牌与您的服务器/ap 进行比较,然后验证 id 令牌。
还没有看到 Git 示例,但有 Google 和 Facebook 示例。
【讨论】:
以上是关于Oauth + SPA + API 后端的主要内容,如果未能解决你的问题,请参考以下文章
使用 Auth0 授权来自我们的 SPA 和其他后端服务的 API 请求
前端/后端分离:Safari 不存储来自 API 的 cookie,该 API 托管在与其前端 SPA 客户端不同的域上