OAuth 2和管理服务器端的多个用户访问令牌

时间:2019-01-16 21:00:09

标签: go oauth server oauth-2.0 access-token

我有一个服务器端应用程序(在GO中实现),可以从外部API 获取用户数据用户数据由第三方存储)公司,他们提供API来访问它。。实际上,我有两种类型的用户。其中一个是患者,另一个是医生。这里的医生演员负责监视患者数据。流程是

  1. 患者(1..n)使用OAuth2授权访问令牌流来授权服务器端应用程序。
  2. 服务器定期通过API提取患者数据并将患者数据存储在本地数据库中
  3. 医生可以随时检查存储在本地数据库中的任何患者数据

第1步很容易。实施OAuth2授予​​流程,我可以为每个用户获取access_token和refresh_token。假设我有100位患者。我假设我可以使用refresh_token获取最新的access_token,而无需再次与患者互动。

问题是,在患者授权了该应用之后,我需要将他/她的access_token和refresh_token存储在某个地方,以便每当服务器启动计划的作业以提取患者数据时,服务器便可以访问外部API使用有效的令牌。这里的一般方法是什么?我应该在用户表上存储access_token和refresh_token并在需要时使用它们吗?

由于我有n个患者(n个令牌)并且服务器可以随时获取外部API,所以我需要找到一种一致的方式来支持这种情况。

请参阅附图以进行可视化。

谢谢

enter image description here

1 个答案:

答案 0 :(得分:1)

由于您只需要一个用户的单个令牌记录,因此用户表可以很好地存储它。您可以考虑为其创建一个新的一对一关联表,因此您可以应用任何必要的约束(非null等)。您还可以使用任何其他安全存储。

您必须存储刷新令牌。是否存储访问令牌及其过期时间(来自/token端点响应)取决于您获取患者数据的频率。如果您计划的任务期限长于访问令牌的生存期,则无需将其保存在持久性存储中。否则,您可以将它们及其刷新令牌存储在一起。

我认为没有通用的方法,因为解决方案取决于您的要求和体系结构。您可以考虑以加密形式存储令牌以提高安全性。我想您还是要对其他患者敏感数据这样做。

为澄清起见,您使用的流程称为Authorization code grant