从 Google 配置 API 迁移到 Rails 应用程序中的目录 API
Migrate from Google Provisioning API to Directory API in Rails Application
我目前正在维护一个依赖 Google 配置 API 的 Rails 应用程序。
不幸的是,此 API 即将被淘汰,取而代之的是 Admin SDK 和目录 APIs。
它使用用户名和密码组合登录 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 协议,该协议确实有一个客户端凭证流,允许简单地使用 username/password 组合,但是根据 Getting Started with OAuth 2.0 一书:
While the preceding paragraphs describe some potential use cases for
this flow, these providers (Google and Amazon) have not yet
implemented the Client Credentials flow in OAuth 2.0.
简而言之,为了使用更新的 API,像上面这样更新代码的最直接方法是什么?提前致谢。任何帮助将不胜感激。
您应该在 APIs & auth | 下设置一个 service account and use that method for access. You set up the account in your API console证书。确保 create/download 一个 p12 密钥凭据对(目前它默认为下载一个 JSON 设置给你)。
查看 service account sample code 以了解有关如何执行此操作的详细信息。
基本上,你这样做:
@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!
此外,您可能需要授权服务帐户 impersonate users within your domain 或设置 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')
我目前正在维护一个依赖 Google 配置 API 的 Rails 应用程序。 不幸的是,此 API 即将被淘汰,取而代之的是 Admin SDK 和目录 APIs。
它使用用户名和密码组合登录 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 协议,该协议确实有一个客户端凭证流,允许简单地使用 username/password 组合,但是根据 Getting Started with OAuth 2.0 一书:
While the preceding paragraphs describe some potential use cases for this flow, these providers (Google and Amazon) have not yet implemented the Client Credentials flow in OAuth 2.0.
简而言之,为了使用更新的 API,像上面这样更新代码的最直接方法是什么?提前致谢。任何帮助将不胜感激。
您应该在 APIs & auth | 下设置一个 service account and use that method for access. You set up the account in your API console证书。确保 create/download 一个 p12 密钥凭据对(目前它默认为下载一个 JSON 设置给你)。
查看 service account sample code 以了解有关如何执行此操作的详细信息。
基本上,你这样做:
@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!
此外,您可能需要授权服务帐户 impersonate users within your domain 或设置 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')