【问题标题】:Connect to 3rd party rest api with oAuth2 security server when using own oauth2 implementing使用自己的 oauth2 实现时,使用 oAuth2 安全服务器连接到 3rd 方 rest api
【发布时间】:2020-12-12 03:51:46
【问题描述】:
我试图找到一些关于如何解决我的问题的最佳实践。
我有一个带有 oauth2 和 firebase 的微服务应用程序,用于身份验证和授权。
我们的应用程序需要连接到同样受 oauth2 保护的第 3 方 rest api。
是否可以集成这两种实现,还是我需要自己制定解决方案?
我的一位同事实现了访问 api 所需的授权代码流程,我们基本上将 access 和 refresh_tokens 存储在数据库中以访问此第 3 方 api。但是感觉不对,我也找不到任何最佳做法,有人可以帮帮我吗?
【问题讨论】:
标签:
spring-boot
oauth-2.0
microservices
【解决方案1】:
您的同事实施的做法非常典型:将您自己的应用程序(您使用 Firebase 管理)的身份验证和授权与授权您使用 3rd 方 API 的用户分开。
以下是您在实施 OAuth 流程时应遵循的一些最佳做法:
- 使用
state参数避免CSRF攻击。将其存储在您的数据库中,并将回调 state 与您为用户随机生成的回调进行比较
- 加密访问和刷新令牌。刷新令牌尤其提供长期访问权限
- 验证您请求的
scope 是否为返回的scope:某些提供商允许用户调整权限,这可能会导致意外错误
- 确保您的刷新令牌不会过期。请查阅提供者的文档以了解刷新令牌是如何被取消授权的。有些是基于时间的,有些是基于发布的新刷新令牌,但无论如何,请确保您的刷新令牌保持有效,如果不是,您必须让用户重新授权您的应用程序
您还可以使用托管 OAuth 提供程序来抽象出所有这些元素。我从事的Xkit 与 Firebase 身份验证集成,因此您的用户可以授权您的应用,并且您可以通过一次 API 调用检索每个用户的令牌。