授权Spring Boot应用通过oauth2client

时间:2019-02-25 20:42:14

标签: angular spring spring-boot oauth-2.0 microservices

我正在尝试创建以下应用程序:

  • 前端:Angular 7.x(引导程序和材质)
  • 后端:spring boot(2.1.x)微服务(使用zuul网关作为后端服务的主要入口点)

前端应用

当前,有一个简单的身份验证机制(尚未与其他提供程序实现oauth2集成)。但是,会生成授权令牌并将其存储在本地状态。最终,还希望允许oauth2登录。

对于后端的每个其余调用,将添加“授权:承载”标头(通过拦截器)。

后端应用

在后端,所有请求都通过zuul网关传递。在网关上,有一个过滤器,用于验证令牌,然后生成另一个“自定义” JWT令牌,该令牌将在向微服务的下游传输时使用。此外,它们之间的微服务使用此“自定义” jwt令牌在它们之间对请求进行身份验证。

OAuth2客户端集成

在一个用例中,我希望一个经过身份验证的用户通过oauth2授权后端应用程序调用其他服务提供商上的API。

想法是与其他提供商的服务的所有交互都将通过后端应用程序完成:

  1. 用户在前端应用上执行操作
  2. 对后端应用程序进行了剩余调用(传递了授权标头)
  3. 后端网关对用户进行身份验证,然后将请求(使用自定义JET令牌)传播到适当的微服务
  4. 微服务,处理请求,最终可能使用当前用户的先前oauth2授权信息(访问/刷新令牌)来调用第三方API。
  5. 结果由微服务处理,然后发送回前端。

因此,所有对第三方提供商的呼叫都将通过后端进行代理。

问题

在其中一个微服务中,我尝试启用oauth2客户端功能(通过@ EnableOauth2Client),但是当spring-boot应用程序重定向到另一个提供程序的授权URL时,在浏览器中出现CORS错误。 (生成的URL很好,并且可以在浏览器页面中打开)。即使这可行,我仍然看到回调URL出现问题,因为这些URL受后端应用程序保护。 (既需要获取回调,还需要能够“识别”回叫的用户,以便我可以在当前用户的数据下保存访问和刷新令牌)

问题

提供此类功能的“正确”或“最佳做法”是什么?

如果在前端应用程序中执行了“授权”,我是否应该只发送访问/刷新令牌以在后端进行存储?如果是这样,如何实现对前端应用程序的“回调”。

0 个答案:

没有答案