Dies ist die offiziell von Google unterstützte Ruby-Client-Bibliothek für die Verwendung der OAuth 2.0-Autorisierung und -Authentifizierung mit Google APIs.
Stellen Sie sicher, dass https://rubygems.org/
in Ihren Gem-Quellen enthalten ist.
Für die normale Client-Nutzung reicht Folgendes aus:
$ gem install googleauth
require 'googleauth'
# Get the environment configured authorization
scopes = [ 'https://www.googleapis.com/auth/cloud-platform' ,
'https://www.googleapis.com/auth/compute' ]
authorization = Google :: Auth . get_application_default ( scopes )
# Add the the access token obtained using the authorization to a hash, e.g
# headers.
some_headers = { }
authorization . apply ( some_headers )
Diese Bibliothek stellt eine Implementierung der Standardanmeldeinformationen der Anwendung für Ruby bereit.
Die Standardanmeldeinformationen für Anwendungen bieten eine einfache Möglichkeit, Autorisierungsanmeldeinformationen für den Aufruf von Google APIs abzurufen.
Sie eignen sich am besten für Fälle, in denen der Anruf unabhängig vom Benutzer dieselbe Identität und Autorisierungsebene für die Anwendung haben muss. Dies ist der empfohlene Ansatz zum Autorisieren von Aufrufen von Cloud-APIs, insbesondere wenn Sie eine Anwendung erstellen, die Google Compute Engine verwendet.
Die Bibliothek bietet auch Unterstützung für das Anfordern und Speichern von Benutzeranmeldeinformationen (3-Legged OAuth2). Derzeit sind zwei Implementierungen verfügbar: ein generischer Autorisierer, der für Befehlszeilen-Apps oder benutzerdefinierte Integrationen nützlich ist, sowie eine Webvariante, die auf Rack-basierte Anwendungen zugeschnitten ist.
Die Autorisierer sind für Autorisierungsanwendungsfälle gedacht. Informationen zur Anmeldung finden Sie unter Google Identity Platform
require 'googleauth'
require 'googleauth/web_user_authorizer'
require 'googleauth/stores/redis_token_store'
require 'redis'
client_id = Google :: Auth :: ClientId . from_file ( '/path/to/client_secrets.json' )
scope = [ 'https://www.googleapis.com/auth/drive' ]
token_store = Google :: Auth :: Stores :: RedisTokenStore . new ( redis : Redis . new )
authorizer = Google :: Auth :: WebUserAuthorizer . new (
client_id , scope , token_store , '/oauth2callback' )
get ( '/authorize' ) do
# NOTE: Assumes the user is already authenticated to the app
user_id = request . session [ 'user_id' ]
credentials = authorizer . get_credentials ( user_id , request )
if credentials . nil?
redirect authorizer . get_authorization_url ( login_hint : user_id , request : request )
end
# Credentials are valid, can call APIs
# ...
end
get ( '/oauth2callback' ) do
target_url = Google :: Auth :: WebUserAuthorizer . handle_auth_callback_deferred (
request )
redirect target_url
end
Proof Key for Code Exchange (PKCE) ist ein RFC, der verhindern soll, dass bösartige Betriebssystemprozesse einen OAUTH 2.0-Austausch kapern. PKCE mildert die oben genannte Schwachstelle, indem es die Parameter code_challenge
und code_challenge_method
in die Autorisierungsanforderung und einen code_verifier
Parameter in die Zugriffstokenanforderung einfügt.
require 'googleauth'
require 'googleauth/web_user_authorizer'
require 'googleauth/stores/redis_token_store'
require 'redis'
client_id = Google :: Auth :: ClientId . from_file ( '/path/to/client_secrets.json' )
scope = [ 'https://www.googleapis.com/auth/drive' ]
token_store = Google :: Auth :: Stores :: RedisTokenStore . new ( redis : Redis . new )
authorizer = Google :: Auth :: WebUserAuthorizer . new (
client_id , scope , token_store , '/oauth2callback' )
get ( '/authorize' ) do
# NOTE: Assumes the user is already authenticated to the app
user_id = request . session [ 'user_id' ]
# User needs to take care of generating the code_verifier and storing it in
# the session.
request . session [ 'code_verifier' ] ||= Google :: Auth :: WebUserAuthorizer . generate_code_verifier
authorizer . code_verifier = request . session [ 'code_verifier' ]
credentials = authorizer . get_credentials ( user_id , request )
if credentials . nil?
redirect authorizer . get_authorization_url ( login_hint : user_id , request : request )
end
# Credentials are valid, can call APIs
# ...
end
get ( '/oauth2callback' ) do
target_url = Google :: Auth :: WebUserAuthorizer . handle_auth_callback_deferred (
request )
redirect target_url
end
Der Google Auth OOB-Flow wurde am 31. Januar 2023 eingestellt. Der OOB-Flow ist ein Legacy-Flow, der nicht mehr als sicher gilt. Um Google Auth weiterhin zu verwenden, migrieren Sie Ihre Anwendungen bitte auf einen sichereren Ablauf. Weitere Informationen hierzu finden Sie in diesem Leitfaden zur OOB-Migration.
require 'googleauth'
require 'googleauth/stores/file_token_store'
OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
scope = 'https://www.googleapis.com/auth/drive'
client_id = Google :: Auth :: ClientId . from_file ( '/path/to/client_secrets.json' )
token_store = Google :: Auth :: Stores :: FileTokenStore . new (
:file => '/path/to/tokens.yaml' )
authorizer = Google :: Auth :: UserAuthorizer . new ( client_id , scope , token_store )
user_id = ENV [ 'USER' ]
credentials = authorizer . get_credentials ( user_id )
if credentials . nil?
url = authorizer . get_authorization_url ( base_url : OOB_URI )
puts "Open #{ url } in your browser and enter the resulting code:"
code = gets
credentials = authorizer . get_and_store_credentials_from_code (
user_id : user_id , code : code , base_url : OOB_URI )
end
# OK to use credentials
scope = 'https://www.googleapis.com/auth/androidpublisher'
authorizer = Google :: Auth :: ServiceAccountCredentials . make_creds (
json_key_io : File . open ( '/path/to/service_account_json_key.json' ) ,
scope : scope )
authorizer . fetch_access_token!
Sie können auch eine JSON-Schlüsseldatei verwenden, indem Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
festlegen.
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service_account_json_key.json
require 'googleauth'
require 'google/apis/drive_v3'
Drive = :: Google :: Apis :: DriveV3
drive = Drive :: DriveService . new
scope = 'https://www.googleapis.com/auth/drive'
authorizer = Google :: Auth :: ServiceAccountCredentials . from_env ( scope : scope )
drive . authorization = authorizer
list_files = drive . list_files ( )
Dies ähnelt der regulären Dienstkontoautorisierung (weitere Informationen zu den Unterschieden finden Sie in dieser Antwort), Sie müssen jedoch angeben, als welchen Benutzer sich Ihr Dienstkonto ausgibt, indem Sie das sub
manuell aktualisieren.
scope = 'https://www.googleapis.com/auth/androidpublisher'
authorizer = Google :: Auth :: ServiceAccountCredentials . make_creds (
json_key_io : File . open ( '/path/to/service_account_json_key.json' ) ,
scope : scope
)
authorizer . update! ( sub : "[email protected]" )
authorizer . fetch_access_token!
export GOOGLE_ACCOUNT_TYPE=service_account
export GOOGLE_CLIENT_ID=000000000000000000000
export [email protected]
export GOOGLE_PRIVATE_KEY= " -----BEGIN PRIVATE KEY-----n...n-----END PRIVATE KEY-----n "
require 'googleauth'
require 'google/apis/drive_v3'
Drive = :: Google :: Apis :: DriveV3
drive = Drive :: DriveService . new
# Auths with ENV vars:
# "GOOGLE_CLIENT_ID",
# "GOOGLE_CLIENT_EMAIL",
# "GOOGLE_ACCOUNT_TYPE",
# "GOOGLE_PRIVATE_KEY"
auth = :: Google :: Auth :: ServiceAccountCredentials
. make_creds ( scope : 'https://www.googleapis.com/auth/drive' )
drive . authorization = auth
list_files = drive . list_files ( )
Autorisierer benötigen eine Speicherinstanz, um die langfristige Persistenz von Zugriffs- und Aktualisierungstokens zu verwalten. Zwei Speicherimplementierungen sind enthalten:
Es können auch benutzerdefinierte Speicherimplementierungen verwendet werden. Weitere Details finden Sie unter token_store.rb.
Diese Bibliothek wird auf Ruby 2.6+ unterstützt.
Google bietet offiziellen Support für Ruby-Versionen, die aktiv von Ruby Core unterstützt werden, also Ruby-Versionen, die sich entweder in der normalen Wartung oder in der Sicherheitswartung befinden und nicht am Ende ihrer Lebensdauer stehen. Ältere Versionen von Ruby funktionieren möglicherweise noch, werden jedoch nicht unterstützt und nicht empfohlen. Weitere Informationen zum Ruby-Supportplan finden Sie unter https://www.ruby-lang.org/en/downloads/branches/.
Diese Bibliothek ist unter Apache 2.0 lizenziert. Der vollständige Lizenztext ist unter LIZENZ verfügbar.
Siehe BEITRAGEN.
Bitte melden Sie Fehler im Projekt auf Github. Zögern Sie nicht, Fragen zum Client oder zu APIs auf StackOverflow zu stellen.