使用OAuth 2.0访问谷歌的API

谷歌的API使用的OAuth 2.0协议进行身份验证和授权。谷歌支持常见的OAuth 2.0场景,如那些Web服务器,安装,和客户端应用程序。

首先,获得来自OAuth 2.0用户端凭证谷歌API控制台。那么你的客户端应用程序请求从谷歌授权服务器的访问令牌,提取令牌从响应,并发送令牌到谷歌的API,您要访问。对于使用OAuth 2.0与谷歌的互动演示(包括利用自己的客户端证书的选项),实验用的OAuth 2.0游乐场。

该页面提供的OAuth 2.0用户授权方案的概述,谷歌的支持,并提供链接到更详细的内容。有关使用OAuth 2.0认证的详细信息,请参阅ID连接。

注: 由于得到执行正确的安全隐患,我们强烈建议您与谷歌的OAuth 2.0端点交互时使用OAuth 2.0库。它是利用他人提供的精心调试代码的最佳实践,这将有助于保护您和您的用户。欲了解更多信息,请参阅客户端库。

基本步骤

访问使用OAuth 2.0谷歌的API时,所有的应用程序都遵循一个基本模式。在高层次上,你遵循四个步骤:

1.获取的OAuth从谷歌API控制台2.0凭据。

访问 谷歌API控制台 获取的OAuth 2.0凭据如已知的谷歌和你的应用程序客户端ID和客户端密钥。设定值的变化基于你正在建设什么类型的应用程序。例如,JavaScript应用程序并不需要一个秘密,但在Web服务器应用程序一样。

2.从谷歌授权服务器的访问令牌。

在应用程序能够使用谷歌API来访问私人数据,它必须获得令牌授予访问该API的访问。单个接入令牌可以授予不同程度的访问到多个API。所谓的可变参数scope控制组的资源和操作的,一个访问令牌许可证。在访问令牌请求,你的应用程序中发送一个或多个值scope的参数。

有几种方法,使这个请求,他们基于应用的您正在构建的类型而有所不同。例如,一个JavaScript应用程序可能会请求令牌使用的浏览器重定向到谷歌的访问,而一个应用程序,没有浏览器使用Web服务请求的设备上安装。

一些请求需要在用户与他们的谷歌帐户登录的验证步骤。登录后,用户被询问他们是否愿意承认你的应用程序请求的权限。这个过程被称为用户的同意。

如果用户授予许可,谷歌授权服务器发送您的应用程序的访问令牌(或授权代码,你的应用程序可以使用,以获得访问令牌)。如果用户不授予权限,服务器返回一个错误。

它一般是要求最佳实践作用域递增,在当时的访问是必需的,而不是前面。例如,在用户按下“购买”按钮要支持购买一个应用程序不应该要求谷歌钱包访问; 看到增量授权。

3.发送令牌的API访问。

后的应用程序获得的访问令牌时,它发送所述令牌的谷歌API在HTTP授权头。它可以发送标记为URI查询字符串参数,但我们不建议这样做,因为URI参数可以在没有完全安全的日志文件结束。此外,它是很好的休息的做法,以避免造成不必要的URI参数的名称。

访问令牌仅适用于所描述的一组操作和资源的scope令牌请求。例如,如果一个访问令牌发布了Google+的API,它不授予访问谷歌联系人API。你可以,但是,发送访问令牌的Google+ API多次进行类似的操作。

4.刷新访问令牌,如果需要的话。

访问令牌寿命有限。如果应用程序需要访问超出了单个访问令牌的使用寿命谷歌的API,它能够获得刷新令牌。刷新令牌可以让你的应用程序,以获得新的访问令牌。

注: 在安全的长期存储保存刷新令牌,并继续只要他们保持有效使用它们。限制适用于每个客户端用户发出的组合刷新令牌的数量,以及每个用户在所有的客户,而这些限制是不同的。如果您的应用程序请求足以刷新令牌走过去的限制之一,老年刷新令牌停止工作。

方案

Web服务器应用程序

该谷歌的OAuth 2.0端点支持的Web服务器应用程序使用的语言和框架,如PHP,Java和Python和Ruby,和ASP.NET。

当你的应用程序重定向浏览器的谷歌URL授权序列开始; 该URL包括查询参数指示所请求的访问类型。谷歌处理用户身份验证,会话选择和用户同意。其结果是一个授权码,其应用可以换取的访问令牌和刷新令牌。

应用程序应该保存令牌以供将来使用刷新和使用令牌来访问谷歌的API访问。一旦访问令牌过期后,应用程序使用令牌来获得一个新的刷新。

有关详细信息,请参阅使用OAuth 2.0 Web服务器应用程序。

安装的应用程序

上安装的设备,诸如计算机,移动设备,和片剂谷歌的OAuth 2.0端点支持的应用程序。当您创建通过客户端ID 谷歌API控制台,指定这是已安装的应用程序,然后选择的Android,Chrome浏览器,iOS或“其他”作为应用程序类型。

该方法得到了客户端ID,并在某些情况下,客户端机密,你在你的应用程序的源代码中嵌入。(在这种情况下,客户端机密显然不是当作一个秘密。)

当你的应用程序重定向浏览器的谷歌URL授权序列开始; 该URL包括查询参数指示所请求的访问类型。谷歌处理用户身份验证,会话选择和用户同意。其结果是一个授权码,其应用可以换取的访问令牌和刷新令牌。

应用程序应该保存令牌以供将来使用刷新和使用令牌来访问谷歌的API访问。一旦访问令牌过期后,应用程序使用令牌来获得一个新的刷新。

有关详细信息,请参阅使用OAuth 2.0安装的应用程序。

客户端(JavaScript)的应用

该谷歌的OAuth 2.0端点支持,在浏览器中运行的JavaScript应用程序。

当你的应用程序重定向浏览器的谷歌URL授权序列开始; 该URL包括查询参数指示所请求的访问类型。谷歌处理用户身份验证,会话选择和用户同意。

其结果是的访问令牌,客户机应该包括它在谷歌API请求之前验证。当令牌过期后,应用重复该过程。

有关详细信息,请参阅使用OAuth 2.0客户端应用程序。

上限量输入设备的应用程序

即如游戏机,摄像机和打印机上有限的输入设备运行谷歌的OAuth 2.0端点支持的应用程序。

授权序列以使Web服务请求,谷歌URL授权码的应用程序。该响应包含几个参数,包括URL和该应用程序显示给用户的代码。

用户获得来自设备的URL和代码,然后切换到一个单独的设备或计算机具有更丰富的输入能力。用户启动浏览器,导航到指定的URL,在日志,并进入码。

同时,应用调查谷歌的网址在指定的时间间隔。用户批准的访问后,从谷歌服务器的响应中包含的访问令牌和刷新令牌。应用程序应该保存令牌以供将来使用刷新和使用令牌来访问谷歌的API访问。一旦访问令牌过期后,应用程序使用令牌来获得一个新的刷新。

有关详细信息,请参阅使用OAuth 2.0设备。

服务帐户

谷歌的API,如预测API和谷歌云存储可以代表你的应用程序的行为,而无需访问用户信息。在这种情况下,你的应用程序需要证明自己的身份的API,但没有用户许可是必要的。同样,在企业的情况下,你的应用程序可以请求一些资源委派访问。

对于这些类型的服务器到服务器交互,你需要一个服务帐户,这是属于你的应用程序,而不是对个人最终用户的账户。您的应用程序调用代表服务帐户的谷歌的API,并且不需要经过用户同意。(在非服务帐户的情况,您的应用程序调用的API谷歌代表最终用户的,有时也需要用户的同意。)

注意:这些服务帐户的情况需要应用程序创建和加密签名JSON网络令牌(JWTs)。我们强烈建议您使用库来执行这些任务。如果您不使用抽象令牌创建和签名库写这样的代码,你可能会作出这样会对您的应用程序的安全造成严重影响的错误。对于支持此方案库的列表,请参阅 服务帐户的文档。

服务帐户的凭据,您从谷歌API控制台获取,包括生成的电子邮件地址,它是独一无二的,客户端ID,以及至少一个公钥/私钥对。您可以使用客户端ID和一个私钥来创建签名JWT,构建以适当的格式的访问令牌请求。然后,应用程序将令牌发送请求到谷歌的OAuth 2.0授权服务器,它返回的访问令牌。该应用程序使用令牌来访问谷歌的API。当令牌过期后,应用重复该过程。

有关详细信息,请参阅服务帐户的文档。

注:虽然您可以使用服务帐户的应用程序,从A G套房域中运行,服务帐户不是你的Google+帐户套房的成员并没有受到由G套房管理员设置的域策略。例如,在G套房管理控制台设定政策来限制摹套房最终用户的共享文件的域之外并不适用于服务帐户的能力。

令牌大小

令牌的尺寸可以变化,可达以下限制:

  • 授权码:256个字节
  • 访问令牌:2048个字节
  • 刷新令牌:512个字节

谷歌保留这些限制范围内调整令牌大小的权利,你的应用程序必须相应地支持可变令牌大小。

令牌过期

您必须编写代码来预测这种可能性,即授予刷新令牌可能不再工作。刷新令牌可能会停止对这些原因的工作:

  • 用户已撤销你的应用程序的访问。
  • 刷新令牌没有被使用六个月。
  • 用户更改密码,并刷新令牌包含Gmail的作用域。
  • 用户帐户已超过批准(现场)刷新令牌的最大数量。

目前的每个客户每个用户帐户50个刷新令牌限制。如果达到了极限,自动创建令牌的新的刷新无效毫无预兆令牌最古老的刷新。此限制并不适用于服务帐户。

还有一个更大限度上刷新的总数令牌的用户帐户或服务帐户可以在所有的客户都有。大多数普通用户都不会超过这个限制,但开发者的测试帐户可能。

如果您需要授权多个程序,机器或设备,一个解决方法是限制客户端,你每个用户帐户的授权,以15或20。如果你是一个数量 摹套房管理员,您可以创建其他管理员用户和使用它们授权部分客户端。

客户端库

下面的客户端库与流行的框架,这使得实施的OAuth 2.0简单整合。更多的功能将随着时间的推移被添加到库中。

  • 谷歌API客户端库的Java
  • 谷歌API客户端库的Python
  • 谷歌API客户端库围棋
  • 谷歌API客户端库的.NET
  • 谷歌API客户端库的Ruby
  • 谷歌API客户端库PHP
  • 谷歌API客户端JavaScript库
  • GTMAppAuth - OAuth客户端库为Mac和iOS

使用OAuth 2.0访问谷歌的API相关推荐

  1. 使用OAuth 2.0访问Google API

    参考: https://developers.google.com/identity/protocols/oauth2 使用OAuth 2.0访问Google API 注意:使用Google的OAut ...

  2. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  3. 谷歌账号登录Google API Oauth 2.0简单申请和使用教程

    在点击编辑,修改回调URL 编辑完后可以参照google开发文档开发 https://developers.google.com/accounts/docs/OAuth2?hl=zh-CN 然后按照需 ...

  4. 使用Google OAuth 2.0存取Google API (Google Client ID)

    [在Google Console注册一个Application ] 在这步骤要先去Google Console页面上去注册一个application, 然后再为这个application申请一组cli ...

  5. android不能在主线程,android.os.NetworkOnMainThreadException 在4.0之后谷歌强制要求连接网络不能在主线程进行访问(示例代码)...

    谷歌在4.0系统以后就禁止在主线程中进行网络访问了,原因是: 主线程是负责UI的响应,如果在主线程进行网络访问,超过5秒的话就会引发强制关闭, 所以这种耗时的操作不能放在主线程里.放在子线程里,而子线 ...

  6. IdentityServer4 实现 OpenID Connect 和 OAuth 2.0

    关于 OAuth 2.0 的相关内容,点击查看:ASP.NET WebApi OWIN 实现 OAuth 2.0 OpenID 是一个去中心化的网上身份认证系统.对于支持 OpenID 的网站,用户不 ...

  7. 使用Xamarin.Android中的Google登录OAuth 2.0对用户进行身份验证

    什么是用户认证? (What is User Authentication?) There is a user base associated with every app that is avail ...

  8. GoogleServices之GooglePlayService Accessing Google APIS(访问谷歌APIS)官方文档翻译

    GoogleServices之GooglePlayService  Accessing Google APIS(访问谷歌APIS)官方文档翻译 AccessingGoogle APIs(访问谷歌API ...

  9. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

最新文章

  1. SAP PM纠正维护
  2. 根据当前时间判断上午好、下午好
  3. 《大型网站技术架构》读书笔记之八:固若金汤之网站的安全性架构
  4. 为什么运行了java文件老是404_java – 为什么Spring MVC用404响应并报告“在...
  5. 自动提醒IE6访客升级浏览器,
  6. win10+vscode部署java开发环境
  7. 用python + openpyxl处理excel(07+)文档 + 一些中文处理的技巧
  8. C++虚函数及虚函数表解析
  9. Win7——Win10系统如何安装Win7系统
  10. 如何在 Mac 上设置 FaceTime?
  11. 从第一范式(2nf)到第二范式(3nf)_关系数据模型-范式
  12. 软中断和tasklet
  13. Apache HBase 最新发布2.0.4 ,分布式数据库
  14. Atitit.研发管理--提升效率--软件开发方法DSM总结o99
  15. ASCII码字符对照表
  16. 魅族手机在开发调试中无法打印log的解决方法
  17. mysql表锁ix_S、X、IS、IX数据库锁机制 很详细的教程,简单易懂
  18. Linux网络驱动MDIO及Phy梳理
  19. 信息学奥赛一本通 1362:家庭问题(family)
  20. css属性的书写顺序

热门文章

  1. 羊城通通顺德 10月前顺德所有公交能刷
  2. Bagging与随机森林
  3. 服务器32g系统为什么显示3g,使用32G内存的电脑是什么样的体验?
  4. python官网无法访问移动网络_关于 win10 创建WiFi热点 问题(无法启动承载网络 , 我们无法设置移动热点,因为你的电脑未建立以太网,wifi或手机网络数据连接 )...
  5. 3.2 天天向上的力量
  6. 微信营销120 名商家调查结果
  7. 数据库设计 - 反范式冗余
  8. jQuery定时器简单使用
  9. 制作桌面精灵(动态桌面)——鼠标跟随的粒子效果
  10. 开工大吉!祝低代码软件开发公司流辰信息财源广进、步步高升!