هذه هي مكتبة عملاء Ruby المدعومة رسميًا من Google لاستخدام ترخيص OAuth 2.0 والمصادقة مع واجهات برمجة تطبيقات Google.
تأكد من وجود https://rubygems.org/
في مصادر الأحجار الكريمة الخاصة بك.
للاستخدام العادي للعميل، هذا يكفي:
$ 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 )
توفر هذه المكتبة تطبيقًا لبيانات اعتماد التطبيق الافتراضية لروبي.
توفر بيانات اعتماد التطبيق الافتراضية طريقة بسيطة للحصول على بيانات اعتماد الترخيص لاستخدامها في الاتصال بواجهات برمجة تطبيقات Google.
وهي مناسبة بشكل أفضل للحالات التي تحتاج فيها المكالمة إلى نفس مستوى الهوية والترخيص للتطبيق بشكل مستقل عن المستخدم. هذا هو الأسلوب الموصى به للسماح باستدعاءات Cloud APIs، خاصة عند إنشاء تطبيق يستخدم Google Compute Engine.
توفر المكتبة أيضًا دعمًا لطلب بيانات اعتماد المستخدم وتخزينها (3-Legged OAuth2.) يتوفر حاليًا تطبيقان، مُرخص عام مفيد لتطبيقات سطر الأوامر أو عمليات التكامل المخصصة بالإضافة إلى متغير ويب مصمم خصيصًا للتطبيقات القائمة على الحامل.
المصرحون مخصصون لحالات استخدام الترخيص. لتسجيل الدخول، راجع 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) هو RFC يهدف إلى منع عمليات نظام التشغيل الضارة من اختطاف تبادل OAUTH 2.0. تعمل PKCE على تخفيف الثغرة الأمنية المذكورة أعلاه من خلال تضمين معلمات code_challenge
و code_challenge_method
في طلب التفويض ومعلمة code_verifier
في طلب رمز الوصول.
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
تم إيقاف تدفق Google Auth OOB في 31 يناير 2023. إن تدفق OOB هو تدفق قديم لم يعد يعتبر آمنًا. لمواصلة استخدام Google Auth، يرجى ترحيل تطبيقاتك إلى تدفق أكثر أمانًا. لمزيد من المعلومات حول كيفية القيام بذلك، يرجى الرجوع إلى دليل ترحيل 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!
يمكنك أيضًا استخدام ملف مفتاح JSON عن طريق تعيين متغير البيئة 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 ( )
يشبه هذا ترخيص حساب الخدمة العادي (راجع هذه الإجابة للحصول على مزيد من التفاصيل حول الاختلافات)، ولكن ستحتاج إلى الإشارة إلى المستخدم الذي ينتحل حساب الخدمة الخاص بك عن طريق تحديث الحقل sub
يدويًا.
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 ( )
يحتاج المصرحون إلى مثيل تخزين لإدارة استمرارية الوصول وتحديث الرموز المميزة على المدى الطويل. تم تضمين تطبيقين للتخزين:
يمكن أيضًا استخدام تطبيقات التخزين المخصصة. راجع token_store.rb للحصول على تفاصيل إضافية.
هذه المكتبة مدعومة على روبي 2.6+.
توفر Google دعمًا رسميًا لإصدارات Ruby المدعومة بشكل نشط بواسطة Ruby Core، أي إصدارات Ruby التي تكون إما في حالة صيانة عادية أو في صيانة أمنية، وليست منتهية الصلاحية. قد تستمر الإصدارات الأقدم من Ruby في العمل، ولكنها غير مدعومة ولا يوصى بها. راجع https://www.ruby-lang.org/en/downloads/branches/ للحصول على تفاصيل حول جدول دعم Ruby.
هذه المكتبة مرخصة تحت Apache 2.0. نص الترخيص الكامل متاح في LICENSE.
انظر المساهمة.
الرجاء الإبلاغ عن الأخطاء في المشروع على جيثب. لا تتردد في طرح أسئلة حول العميل أو واجهات برمجة التطبيقات على StackOverflow.