Il s'agit de la bibliothèque client Ruby officiellement prise en charge par Google pour l'utilisation de l'autorisation et de l'authentification OAuth 2.0 avec les API Google.
Assurez-vous https://rubygems.org/
figure dans vos sources de pierres précieuses.
Pour une utilisation client normale, cela suffit :
$ 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 )
Cette bibliothèque fournit une implémentation des informations d'identification par défaut de l'application pour Ruby.
Les informations d'identification par défaut de l'application fournissent un moyen simple d'obtenir les informations d'identification d'autorisation à utiliser pour appeler les API Google.
Ils conviennent mieux aux cas où l'appel doit avoir le même niveau d'identité et d'autorisation pour l'application, indépendamment de l'utilisateur. Il s'agit de l'approche recommandée pour autoriser les appels aux API Cloud, en particulier lorsque vous créez une application qui utilise Google Compute Engine.
La bibliothèque prend également en charge la demande et le stockage des informations d'identification des utilisateurs (3-Legged OAuth2.) Deux implémentations sont actuellement disponibles, un autorisateur générique utile pour les applications en ligne de commande ou les intégrations personnalisées, ainsi qu'une variante Web adaptée aux applications basées sur Rack.
Les autorisations sont destinées aux cas d’utilisation d’autorisation. Pour la connexion, consultez 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) est une RFC qui vise à empêcher les processus malveillants du système d'exploitation de détourner un échange OAUTH 2.0. PKCE atténue la vulnérabilité ci-dessus en incluant les paramètres code_challenge
et code_challenge_method
dans la demande d'autorisation et un paramètre code_verifier
dans la demande de jeton d'accès.
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
Le flux OOB Google Auth a été interrompu le 31 janvier 2023. Le flux OOB est un flux hérité qui n'est plus considéré comme sécurisé. Pour continuer à utiliser Google Auth, veuillez migrer vos applications vers un flux plus sécurisé. Pour plus d'informations sur la façon de procéder, veuillez vous référer à ce guide de migration OOB.
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!
Vous pouvez également utiliser un fichier de clés JSON en définissant la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS
.
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 ( )
Ceci est similaire à l'autorisation de compte de service standard (voir cette réponse pour plus de détails sur les différences), mais vous devrez indiquer de quel utilisateur votre compte de service usurpe l'identité en mettant à jour manuellement le sub
champ.
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 ( )
Les autorisateurs ont besoin d'une instance de stockage pour gérer la persistance à long terme des jetons d'accès et d'actualisation. Deux implémentations de stockage sont incluses :
Des implémentations de stockage personnalisées peuvent également être utilisées. Voir token_store.rb pour plus de détails.
Cette bibliothèque est prise en charge sur Ruby 2.6+.
Google fournit un support officiel pour les versions de Ruby qui sont activement prises en charge par Ruby Core, c'est-à-dire les versions de Ruby qui sont soit en maintenance normale, soit en maintenance de sécurité, et non en fin de vie. Les anciennes versions de Ruby peuvent toujours fonctionner, mais elles ne sont ni prises en charge ni recommandées. Voir https://www.ruby-lang.org/en/downloads/branches/ pour plus de détails sur le calendrier de support Ruby.
Cette bibliothèque est sous licence Apache 2.0. Le texte complet de la licence est disponible dans LICENCE.
Voir CONTRIBUTION.
Veuillez signaler les bugs du projet sur Github. N'hésitez pas à poser des questions sur le client ou les API sur StackOverflow.