我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合特肖 > 访问令牌 >

OAuth2 身份验证

归档日期:07-19       文本归类:访问令牌      文章编辑:爱尚语录

  您希望以任何可授予您应用对 AdWords 帐号数据访问权限的用户身份进行验证。

  即使您正在开发基于网络的应用,仍然可以选择已安装的应用流程:主要区别在于您是否需要在发出令牌后回调您的网站。例如,如果您使用单个顶级经理帐号来管理所有 AdWords 帐号,则即便可通过网络访问您的客户端应用,您也应该注册已安装应用。

  有关详情,请参阅有关已安装应用网络应用的 Google 身份平台 OAuth 文档。

  确定应用类型后,请点击下面的相应标签,然后按照说明生成 OAuth2 客户端 ID 和客户端密钥:

  请按照下面的相应指南,在所用语言客户端库的配置中使用 OAuth2 凭据:

  OAuth2 Playground 适用于只需访问单个经理帐号或 AdWords 用户帐号的用户。如果您需要提示多个用户提供凭据,则可能最好使用上述基于客户端库的方法。

  。这是唯一能与 OAuth2 Playground 一起使用的应用类型

  您在浏览器中登录所用的 Google 用户身份,决定了您可以使用所生成的 OAuth2 凭据访问哪些 AdWords 帐号。因此,建议您在隐身窗口中或未登录 Google 帐号的情况下执行这些步骤,因为您获取客户端 ID 和密钥时所登录的用户可能与想要使用其凭据的用户不同。

  前往OAuth2 Playground,所到达的页面中一些重要的值应该已为您预先填充。

  如果出现提示,请登录到要向其授予访问权限和进行授权的帐号。否则,请确认目前右上角的 Google 用户是您要取得凭据的 AdWords 帐号或经理帐号。

  系统会提示您,您的应用希望管理您的 AdWords 广告系列。点击Accept以继续。

  既然您已拥有刷新令牌,不再需要将 OAuth2 Playground 作为经过授权的重定向 URI,要从经过授权的重定向 URI 列表中移除它,请按以下步骤操作:

  您现在拥有了 OAuth 凭据,可以发出 AdWords API 请求,为您选择的客户端库尝试代码示例。

  服务帐号是属于您的应用而不是个别最终用户的帐号。服务帐号允许网络应用和 Google 服务之间进行服务器到服务器的互动。您的应用会代表服务帐号调用 Google API,因此用户不会直接参与。

  服务帐号使用 OAuth2 流程,无需人工授权,但需要使用只有您的应用可以访问的密钥文件。

  对应用授予 Google API 访问权限的操作是作为配置步骤进行的,可以避免使用其他 OAuth2 流程所带来的复杂问题;用户不需要进行干预,应用也不必为避免将来需要用户干预而缓存令牌。

  (例如模拟),否则不建议您使用服务帐号。如果获得了对帐号的访问权限,OAuth2 已安装应用和网络流程只需要一次用户互动。

  开发者通常会考虑使用服务帐号,因为他们需要在不进行用户干预的情况下,使用 OAuth2 以编程方式访问 API。

  考虑到为 AdWords API 设置服务帐号访问权限的复杂性,我们建议使用一个更简单的替代方案来实现相同的目标,即使用OAuth2 已安装应用流程,并持久保留刷新令牌。这样,如有必要,您的应用始终能够请求新的访问令牌。

  此过程需要您根据上述已安装应用过程配置您的客户端库,从而对您的应用进行授权。因为 Google OAuth2 刷新令牌不会过期,所以,此过程只需执行一次。

  考虑到 G Suite 的网域级控制,因此一定要保护允许服务帐号访问其获授权的 Google 服务的密钥文件。因为该服务帐号能够模拟网域中的任何用户,所以尤其需要强调这一点。

  另一个好的做法是每个服务帐号只允许访问一个 Google API(使用下一节中描述的范围字段)。这是一种先发制人的措施,即使服务帐号的密钥文件被泄露,仍能限制攻击者可以访问的数据量。

  您现在即可使用服务帐号通过 OAuth2 断言流程访问您的 AdWords 帐号。

  如果您的应用不能在服务器、进程和线程之间共享凭据,就可能会向 Google 发送过多的请求。这可能导致我们的服务器对您的应用强制执行速率限制,造成性能下降。

  本节介绍如何优化 OAuth2 凭据管理,以便您的应用可以与 AdWords API 进行高效互动。

  跨 API 请求共享凭据可提高性能,并避免可能引发速率限制错误的过多开销。

  在多进程或分布式应用中,要跨进程共享凭据,必须实现一些基础架构。您还应该确保线程不会被阻止,并且自己的实现中不存在争用的情况。

  如果应用的每次处理中同时具有多进程/分布式和多线程,则应该同时使用这两种策略。

  下面介绍了对单个 AdWords 帐号(例如层级结构中的顶级经理帐号)进行身份验证的这些策略。

  然后描述了如何改变这些策略,以便对多个 AdWords 帐号进行身份验证。

  多线程应用应在线程之间共享凭据。应同步执行对凭据的刷新,以避免出现争用情况。

  该图显示了一个运行时,其中带有提取自会话(或用户)池的线程,可向 AdWords API 发出请求。请注意,每个会话应使用相同的凭据对象。在每个 API 请求中,由线程获得会话(或用户)。如果凭据需要访问令牌刷新,则必须同步执行,即凭据对象对线程必须是安全的,以避免出现争用情况。

  客户端库可直接跨线程共享凭据。每个客户端库都有一个会话(或用户)对象,并带有可在其生命周期中重用的凭据。要跨线程共享凭据,只需使用相同的凭据构建每个会话即可。在所有客户端库中,凭据是当访问令牌期满时会对自身进行同步刷新的对线程安全的对象。

  例如,在 Java 客户端库中,您可以将Credential创建为单实例模式,并在所有会话间共享。

  要在多进程或分布式应用中共享凭据,需要实现对凭据的持久保留。为了确保多个进程或服务器不会同时尝试刷新凭据(从而导致刷新请求过多),我们建议在某中央位置主动刷新凭据,并在进程/服务器之间共享凭据。

  例如,可以由独立的作业或服务负责周期性地刷新凭据,并且主动将其推送到数据存储,以供服务器池使用。

  该图显示了定期运行的凭据刷新作业,并将凭据的属性写入数据存储。然后,每个服务器在向 API 发出请求之前都要获取凭据。

  刷新作业会定期刷新凭据并将其存储在数据存储中。作业不应等到当前凭据到期才启动刷新,否则可能导致应用因缺少有效凭据而停止运行,开一个“天窗”。

  较好的替代方法是定期强制刷新,每次都用新凭据替换数据存储中的凭据。刷新作业应该在当前凭据到期之前尽早运行,以便预留一些时间,防止出现瞬间失败。比如,可考虑先从每 15 分钟刷新一次开始。

  您既可以使用现有的数据存储,也可以部署一个特定于服务器间凭据共享的数据存储。解决方案既可以是缓存服务器(如Memcached)。

  对于向 API 发出请求的所有服务器,数据存储必须提供可靠的接口。它应该面向快速读取操作进行优化,原因是服务器或进程对当前凭据的读取频率要高于刷新作业的更新频率。

  池中的每个服务器或进程先从数据存储中获取最新的凭据,然后才发出请求。只要刷新作业成功运行,凭据就会有效。但是,如果刷新作业或数据存储失败,您应该有一个回退机制。

  如果服务器或进程无法从数据存储获取凭据,或者凭据已过期,则服务器应刷新自己的凭据,以允许应用继续使用 API,直到问题解决。

  为 AdWords 经理帐号生成的凭据可用于访问其所有子帐号。因此,对于具有单一经理帐号层级结构的用户,通常只需为顶级经理帐号生成凭据,即可为其下的所有 AdWords 帐号实现应用授权。

  另一些情况下,您的应用必须访问在任何经理帐号层级结构中彼此都不相关的 AdWords 帐号。在这种情况下,对于不同的帐号(例如您访问的每个 AdWords 客户帐号,或您访问的独立层级结构中的每个顶级经理帐号),您应该生成并维护不同凭据。

  只需进行最低程度的修改,即可对多线程多进程/分布式应用采用相同的策略。使用共享数据存储时,必须通过帐号标识符customerId对凭据编制索引,以确保凭据与正确的帐号相关联。此外,刷新作业应保证对所有凭据进行刷新。如果关联了新帐号,则可能需要触发刷新作业。

  最后,在多线程应用中,在其间共享凭据对象的线程应该操作于与该凭据对象关联的帐号上。

  就以下所涉及的详细信息而言,我们的客户端库会实现自动处理,因此只有在您对后台发生的情况感兴趣时,或者您没有使用我们的任何客户端库时,才需要继续阅读。

  本部分的目标读者是熟悉OAuth 2.0 规范并且了解如何结合使用 OAuth2 和 Google API的高级用户。

  同一个访问令牌可授予对多个 API 的不同级别的访问权限。有一个称为scope的可变参数用于控制访问令牌允许的资源和操作集。在请求访问令牌期间,您的应用在scope参数中发送一个或多个值。

  AdWords API 客户端应用通常会请求进行离线访问。例如,当您的用户并未实际在线浏览您的网站时,您的应用可能会希望运行批处理作业。

  要为某网络应用类型请求离线访问,请确保将access_type参数设置为offline。您可以在Google 的 OAuth2 指南中找到更多信息。

  对于已安装应用类型,离线访问在默认情况下处于启用状态,因此您不必专门请求离线访问。

  发送到 AdWords API 服务器的每个请求中的 HTTP 标头都必须包含以下形式的访问令牌:

  在大多数情况下,您需要安全地存储刷新令牌以备将来使用。要详细了解如何请求访问令牌和刷新令牌,请阅读与您的应用类型相对应的指南:

  访问令牌有一个基于expires_in值的过期时间;过期后,令牌即会失效。您可以使用刷新令牌刷新过期的访问令牌。默认情况下,我们的客户端库会自动刷新过期的访问令牌。

本文链接:http://shawntierney.com/fangwenlingpai/660.html