0

我目前正在维护一个依赖于 Google Provisioning API 的 Rails 应用程序。不幸的是,这个 API 很快就会被淘汰,取而代之的是 Admin SDK 和 Directory API。

它使用用户名和密码组合登录 API 并创建 Google 群组。这是一个例子:

gapps = ProvisioningApi.new(ENV[GAPPS_USER], ENV[GAPPS_PASSWORD])

group = gapps.create_group(listserv_group.group_id, [listserv_group.name, listserv_group.desc, "blah"])

users = User.all(:joins => :user_listserv_groups,
                 :conditions => "user_listserv_groups.listserv_group_id = #{county.listserv_group.id}")
users.each do |u|
  if !params[:excluded_members].include?(u.id.to_s)
    gapps.add_member_to_group(u.email, listserv_group.group_id)
  end
end

新的 API 使用 OAuth 协议,该协议确实有一个客户端凭据流,允许简单地使用用户名/密码组合,但根据OAuth 2.0 入门一书:

虽然前面的段落描述了此流程的一些潜在用例,但这些提供商(Google 和 Amazon)尚未在 OAuth 2.0 中实施客户端凭据流程。

简而言之,为了使用较新的 API,更新上述代码的最直接方法是什么?提前致谢。任何帮助,将不胜感激。

4

1 回答 1

1

您应该设置一个服务帐户并使用该方法进行访问。您在API 控制台中的 APIs & auth | 下设置帐户 证书。确保创建/下载 p12 密钥凭证对(目前默认为您下载 JSON 集)。

查看服务帐户示例代码,了解如何执行此操作的详细信息。

基本上,你这样做:

@client = Google::APIClient.new(
  :application_name => application_name,
  :application_version => application_version)

## Load our credentials for the service account
key = Google::APIClient::KeyUtils.load_from_pkcs12(key_file, key_secret)

@client.authorization = Signet::OAuth2::Client.new(
  :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
  :audience => 'https://accounts.google.com/o/oauth2/token',
            # Replace this with the scope for the Directory api
  :scope => 'https://www.googleapis.com/auth/analytics.readonly',
  :issuer => service_account_email,
  :signing_key => key)

## Request a token for our service account
@client.authorization.fetch_access_token!

此外,您可能需要授权服务帐户来模拟您域内的用户或设置 API 访问权限。这两项都是在您的 Google Apps 域的管理面板中完成的。:person这允许您通过将参数传递给客户端构造函数来访问已授权给帐户上其他用户的资源。

@client.authorization = Signet::OAuth2::Client.new(
  :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
  :audience => 'https://accounts.google.com/o/oauth2/token',
            # Replace this with the scope for the Directory api
  :scope => 'https://www.googleapis.com/auth/analytics.readonly',
  :issuer => service_account_email,
  :signing_key => key,
  :person => 'another_user@example.com')
于 2015-03-21T01:36:04.650 回答