SPA + API 服务器 + 3rd Party OAuth 认证

Evr*_*gøl 5 authentication oauth oauth-2.0 jwt single-page-application

假设我们有 SPA、OAuth 服务(Google 或 FB 或 Linked in)和一个应用程序服务器(我们的 API),它将 SPA 服务到客户端。

我们的 SPA 从客户端使用 OAuth 针对 3rd 方进行身份验证,比如 google 或链接或 FB,使用的方法被称为“隐式流程”。它通过传递一个额外的步骤返回访问令牌。现在我们如何使用这个访问令牌与我们的 API 进行通信。它们是解耦的。

此时客户端应用程序(SPA)具有令牌和我们从第 3 方 OAuth 获得的 FB|GOOGLE|LINKEDIN 用户 ID。

现在假设我们正在向我们的服务器发出 GET 请求,并且它必须是一个经过身份验证的请求。我们如何使用从 OAuth 获得的令牌

1)我们是否使用我们从 OAuth 获得的令牌从 SPA 到我们的 APP 服务器(我们的 api 服务器)进行 API 调用,这次我们使用相同的令牌再次从 APP 服务器重新调用 OAuth 服务,并确保它是一个有效的令牌,并从该令牌创建一个 JWT 并使用 jwt 进行以下 api 调用。

2) 或者我们使用 FB|GOOGLE|LINKEDIN 实现标准的服务器端 OAuth 实现,在身份验证后,我们为该用户在服务器端保存该访问令牌,并将 SPA 提供给客户端,并将我们从 OAuth 服务器获得的访问令牌传递给客户端。现在该令牌可用于跟踪对 API 调用的调用。

3) 或者我们使用 FB|GOOGLE|LINKEDIN 实现标准的服务器端 OAuth 实现,在身份验证后,我们为该用户在服务器端保存访问令牌并为 SPA 提供服务,但这次创建一个 JWT 并将其提供给客户端,客户端现在可以使用 JWT 进行后续调用。

我不知道正确的方法是什么。或者,如果它甚至是使用带有 SPA 的 OAuth 进行身份验证的好方法,因为隐式授予显然不是一个好方法。