使用单个OAuth令牌和密钥访问来自谷歌的多个服务

6
我正在使用OAuth访问Google提供的不同服务。我能够按每个服务生成一个令牌。但是我想要生成一个单一的令牌来使用来自Google的多个服务。 有人能告诉我如何解决这个问题吗?
1个回答

7

https://developers.google.com/accounts/docs/OAuth2

根据Google OAuth2文档,可以通过设置多个范围来实现此操作,但请注意,这并不是一个愉快的体验。在进行请求时,将作用域参数设置为多个作用域,每个作用域之间用单个空格分隔。例如:"https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.google.com/m8/feeds"。您可以在此处找到目前可用的作用域列表:https://developers.google.com/gdata/faq。不幸的是,API访问不具有可添加性,这意味着如果您要求Google Contacts API的访问令牌,然后稍后作为同一应用程序请求Google Profile API的访问令牌,则最终会得到两个访问令牌,而且没有一个可以用于访问其他API。Facebook至少会归还一个单一的访问令牌,该令牌授予迄今为止授予的所有权限的访问权限。
因此,你不得不跟踪多个访问令牌(非常可怕的噩梦,因为它们很快就会过期),或者要求提前获取所有权限,这是一场用户体验灾难。
分散和不一致的谷歌API目前设置失败,如果你想进行紧密的、多方面的集成。

2
这可能是一个晚回复,但能否澄清一下多个作用域的问题是什么?我经常使用多个作用域,并没有发现任何问题。问题纯粹是关于作用域授权不是可加的吗?您可以随时ping https://www.googleapis.com/oauth2/v1/tokeninfo来查看令牌具有哪些作用域,然后将您的新作用域添加到其中。足够简单的解决方法。然而,通常最简单和最容易的方法是提前请求所有作用域,这样对于开发人员来说更容易,对于最终用户来说更清洁。 - Arun Nagarajan
1
避免“一刀切”的令牌。推荐的最佳实践是尽可能使用最少数量的作用域来帮助用户理解流程,并增加他们批准您访问请求的可能性。因此,与arun相反,在授予访问权限的每个时间点上应使用离散的令牌。根据我的经验,这不会导致管理上的“噩梦”。您应该将刷新令牌按用户和API范围键入以了解在哪种情况下使用哪个。库应负责获取访问令牌。 - David Primmer
1
当你将此与 Facebook 的 API 进行比较时,例如,Facebook 允许你稍后请求其他作用域,并返回一个单一的令牌,该令牌授予用户随时间获得的所有权限。我很难相信你认为处理多个令牌是更好的。我希望从文本中可以清楚地看出,“一刀切”的令牌是不好的,但我认为,当你稍后“临时”请求更多权限时,你不应该因为需要处理多个令牌而受到惩罚。虽然我很高兴这对你来说不是噩梦,也许我应该加上 “YMMV” :) - majelbstoat
1
这在2012年可能是正确的,但自从过去几年以来,谷歌已经添加了增量范围,允许您在需要时收集额外的权限。生成的新访问令牌也具有先前增量的所有范围。阅读更多-https://developers.google.com/identity/protocols/oauth2/scopes#incrementalAuth - Phalgun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接