api - 具有多个用户的 OAuth2 客户端身份验证
问题描述
我在 FileMaker 中构建了一个房间预订应用程序,它通过日历 API 访问 Google 日历,并通过 OAuth2 进行了身份验证。
除了我不确定 OAuth2 客户端令牌流与将使用该系统的单个 FileMaker/GCal 用户之间的关系之外,一切都运行良好。
目前,我既是 Google Developer Console 中项目的所有者,也是唯一的 beta 测试人员,因此系统自然而然地与我的日历一起工作——我登录一次,通过 OAuth2 我的 ClientID 和 Secret,生成我的代码,交换它用于令牌和刷新,我走了。
但是,目前整个系统只有一个Token 和 Refresh,保存在单行 FileMaker 表中,因此,当我创建第二个测试用户时,事情仍然转发到我的日历。
这是我不清楚的地方。这听起来很明显,但很难找到明确的答案。
我是否应该拥有它,以便每个用户使用相同的 ClientID 和 Secret(我对他们保密)来生成他们自己唯一的令牌集?
或者单组就足够了,我误解了系统的其他方面(如果是这样,是什么)?
简而言之:令牌是每个应用程序还是每个应用程序用户?
解决方案
回答我自己的问题:
客户(=应用程序)的东西
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 + 您的客户密码 + 他们的刷新令牌 = 新的访问令牌
推荐阅读
- python - 如何为 discord.py bot 列出所有语音通道
- ruby-on-rails - 更新 Ruby 后意外 = 在 haml 文件中
- python - sqlalchemy 中的 TaggedBlogRecord 继承模型中缺少什么才能正常工作?
- r - R的合并功能通过行名合并数据框
- performance - vCPU 如何影响我的 .net 核心应用程序性能?
- nativescript-vue - NativeScript Vue中的重新排序列表
- c - Declaring a static array before defining it when compiling with GCC
- python - pip install 不升级特定依赖项
- python - SyntaxError - 需要一个缩进的块
- javascript - 使用 JS 通过 JSON 验证登录