Google OAuth2 API按子域分离令牌
我有一个多租户应用程序,我需要与Google API端点集成,比如日历API 应用程序的组织方式很像Slack。您可以创建名称空间并邀请用户使用它。子域用于分隔名称空间,因此可以有:Google OAuth2 API按子域分离令牌,oauth,google-oauth,Oauth,Google Oauth,我有一个多租户应用程序,我需要与Google API端点集成,比如日历API 应用程序的组织方式很像Slack。您可以创建名称空间并邀请用户使用它。子域用于分隔名称空间,因此可以有:foo.domain.com、bar.domain.com、和baz.domain.com 一个用户可以属于多个名称空间,就像在slack中可以属于不同的团队一样。因此,John可以是foo和bar的成员 问题是,当John决定让foo访问他的日历信息时,谷歌将授权链接到domain.com,而不是foo.domai
foo.domain.com
、bar.domain.com
、和baz.domain.com
一个用户可以属于多个名称空间,就像在slack中可以属于不同的团队一样。因此,John
可以是foo
和bar
的成员
问题是,当John
决定让foo
访问他的日历信息时,谷歌将授权链接到domain.com
,而不是foo.domain.com
。当我尝试将他的日历也授予bar
访问权限时,没有刷新令牌,因为技术上John
已经授权访问。。。但我希望这些是独立的。因此,John
能够撤销对foo.domain.com
的访问权,但继续让bar.domain.com
访问他的日历数据
有没有办法为同一用户创建对同一应用程序的独立授权?我无法跨子域共享
刷新\u令牌
,因为它们可能在物理上是分离的,并且我无法为每个子域创建不同的应用程序,因为它们是动态生成的。身份验证的工作方式是基于您在Google developer console中创建的客户端
如果John授予您的客户端访问其日历数据的权限,则该客户端将有权访问其日历数据。谷歌无法知道是你的foo或bar子域被授予了访问权
多客户端选项
您可能应该为每个不同的子域创建不同的客户端凭据。这可能是最合乎逻辑的做法
单客户端选项
除此之外,您还可以将信息存储在数据库中的某个地方,John已授予对foo而非bar的访问权限,并为foo而非bar存储刷新令牌,如果他想为foo删除该令牌,则他可以这样做。您不必担心更新刷新令牌,因为从技术上讲,一个用户最多可以拥有50个与单个客户端关联的刷新令牌
如果用户执行revoke操作,只需使用revoke进行观察,它将撤销对所有内容的访问,而不仅仅是对单个应用程序的访问。如果用户明确单击“授权”按钮,Google的OAuth实现只会在响应中返回一个刷新令牌。这总是在第一次提示用户进行授权时发生,但默认情况下,当同一应用程序再次要求对同一作用域进行授权时,将跳过“同意”屏幕 您可以覆盖此行为,并通过在授权URL中添加参数
prompt=approve
,强制用户再次查看同意屏幕:
这样做将确保每次都返回刷新令牌。请记住,给定的用户应用程序对一次只能有50个激活的刷新令牌,在此之后,旧令牌将失效:
感谢您的快速回答,DaImTo。。。不幸的是,我认为这两种方法都行不通。。。我无法共享信息(单客户端选项),因为不同的子域可能在物理上是分离的,无法在它们之间进行通信,我也无法执行多客户端选项,因为子域是在注册过程中动态创建的,似乎我无法通过编程生成这些子域:(这是您唯一的选择。Oauth通常是这样工作的。用户向客户机进行身份验证。我仍然认为,如果您在数据库中正确设置了单客户机选项,它就可以工作。