首页 > 解决方案 > 具有多个用户的 OAuth2 客户端身份验证

问题描述

我在 FileMaker 中构建了一个房间预订应用程序,它通过日历 API 访问 Google 日历,并通过 OAuth2 进行了身份验证。

除了我不确定 OAuth2 客户端令牌流与将使用该系统的单个 FileMaker/GCal 用户之间的关系之外,一切都运行良好。

目前,我既是 Google Developer Console 中项目的所有者,也是唯一的 beta 测试人员,因此系统自然而然地与我的日历一起工作——我登录一次,通过 OAuth2 我的 ClientID 和 Secret,生成我的代码,交换它用于令牌和刷新,我走了。

但是,目前整个系统只有一个Token 和 Refresh,保存在单行 FileMaker 表中,因此,当我创建第二个测试用户时,事情仍然转发到我的日历。

这是我不清楚的地方。这听起来很明显,但很难找到明确的答案。

我是否应该拥有它,以便每个用户使用相同的 ClientID 和 Secret(我对他们保密)来生成他们自己唯一的令牌集?

或者单组就足够了,我误解了系统的其他方面(如果是这样,是什么)?

简而言之:令牌是每个应用程序还是每个应用程序用户?

标签: apioauth-2.0google-calendar-api

解决方案


回答我自己的问题:

客户(=应用程序)的东西

Client ID:与应用程序相关,对所有用户通用

Client Secret:与应用程序有关,对所有用户通用

重定向 URI:与应用程序有关,对所有用户通用

用户资料

授权码:特定于每个用户,需要客户端 ID 和客户端密码,并在用户使用 3rd 方服务(例如http://YourRedirectURI.com?code=abc123)进行身份验证后从重定向 URL 中检索为 GET 变量

刷新令牌:特定于每个用户,需要客户端 ID 和授权码

访问令牌:特定于每个用户,需要客户端 ID 和刷新令牌,并且有时间限制(通常为 1 小时),因此需要在过期后重新生成一个新令牌

NB 用户不应看到客户端密码(或理想情况下的客户端 ID)。它们应该在应用程序的内部逻辑中用于为用户的代码/令牌生成调用,但他们看不到。

OAUTH2 流程

因此,基本上 OAuth2 的“流程”如下:

1) 您的客户 ID + 您的客户密码 + 他们对第 3 方服务的身份验证登录 = 该特定用户的身份验证代码作为重定向 URI 中的 GET var

2) 您的客户 ID + 您的客户密码 + 他们的验证码 = 刷新令牌和访问令牌

3) 您的客户 ID + 您的客户密码 + 他们的刷新令牌 = 新的访问令牌


推荐阅读