Ini adalah pustaka klien Ruby yang didukung secara resmi oleh Google untuk menggunakan otorisasi dan autentikasi OAuth 2.0 dengan Google API.
Pastikan https://rubygems.org/
ada di sumber permata Anda.
Untuk penggunaan klien normal, ini sudah cukup:
$ 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 )
Pustaka ini menyediakan implementasi kredensial default aplikasi untuk Ruby.
Kredensial Default Aplikasi memberikan cara sederhana untuk mendapatkan kredensial otorisasi untuk digunakan dalam memanggil Google API.
Mereka paling cocok untuk kasus-kasus ketika panggilan harus memiliki tingkat identitas dan otorisasi yang sama untuk aplikasi yang independen dari pengguna. Ini adalah pendekatan yang direkomendasikan untuk mengotorisasi panggilan ke Cloud API, khususnya saat Anda membuat aplikasi yang menggunakan Google Compute Engine.
Pustaka ini juga menyediakan dukungan untuk meminta dan menyimpan kredensial pengguna (3-Legged OAuth2.) Dua implementasi saat ini tersedia, otorisasi umum yang berguna untuk aplikasi baris perintah atau integrasi khusus serta varian web yang disesuaikan dengan aplikasi berbasis Rak.
Otorisasi dimaksudkan untuk kasus penggunaan otorisasi. Untuk masuk, lihat 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) adalah RFC yang bertujuan untuk mencegah proses sistem operasi berbahaya membajak pertukaran OAUTH 2.0. PKCE memitigasi kerentanan di atas dengan menyertakan parameter code_challenge
dan code_challenge_method
dalam Permintaan Otorisasi dan parameter code_verifier
dalam Permintaan Token Akses.
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
Alur OOB Google Auth telah dihentikan pada tanggal 31 Januari 2023. Alur OOB adalah alur lama yang tidak lagi dianggap aman. Untuk terus menggunakan Google Auth, harap migrasikan aplikasi Anda ke aliran yang lebih aman. Untuk informasi lebih lanjut tentang cara melakukan hal ini, silakan lihat panduan Migrasi OOB ini.
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!
Anda juga dapat menggunakan file kunci JSON dengan menyetel variabel lingkungan 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 ( )
Ini mirip dengan otorisasi akun layanan biasa (lihat jawaban ini untuk detail selengkapnya tentang perbedaannya), namun Anda harus menunjukkan pengguna mana yang ditiru oleh akun layanan Anda dengan memperbarui sub
secara manual.
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 ( )
Pengotorisasi memerlukan instans penyimpanan untuk mengelola persistensi akses jangka panjang dan menyegarkan token. Dua implementasi penyimpanan disertakan:
Implementasi penyimpanan khusus juga dapat digunakan. Lihat token_store.rb untuk detail tambahan.
Perpustakaan ini didukung pada Ruby 2.6+.
Google memberikan dukungan resmi untuk versi Ruby yang secara aktif didukung oleh Ruby Core—yaitu, versi Ruby yang berada dalam pemeliharaan normal atau dalam pemeliharaan keamanan, dan belum habis masa pakainya. Versi Ruby yang lebih lama mungkin masih berfungsi, namun tidak didukung dan tidak direkomendasikan. Lihat https://www.ruby-lang.org/en/downloads/branches/ untuk detail tentang jadwal dukungan Ruby.
Perpustakaan ini dilisensikan di bawah Apache 2.0. Teks lisensi lengkap tersedia di LISENSI.
Lihat KONTRIBUSI.
Silakan laporkan bug pada proyek di Github. Jangan ragu untuk mengajukan pertanyaan tentang klien atau API di StackOverflow.