استفاده از OAuth2 در پایتون: آموزش جامع
OAuth2 یک چارچوب مجوز (Authorization Framework) است که به برنامهها اجازه میدهد تا به منابع محافظتشدهی کاربر در یک سرویس دیگر دسترسی پیدا کنند، بدون اینکه نیاز به به اشتراک گذاشتن نام کاربری و رمز عبور کاربر با آن برنامه باشد. این مقاله به بررسی عمیق OAuth2 در پایتون میپردازد و نحوه پیادهسازی آن را در برنامههای مختلف شرح میدهد. این آموزش در دسته بندی ‘امنیت و رمزنگاری در پایتون’ قرار میگیرد.
مقدمهای بر OAuth2
در گذشته، برای دسترسی یک برنامه به منابع کاربر در یک سرویس دیگر، معمولاً نیاز به به اشتراک گذاشتن نام کاربری و رمز عبور کاربر با آن برنامه بود. این روش، از نظر امنیتی بسیار خطرناک است، زیرا اگر برنامه هک شود، اطلاعات کاربری کاربر نیز به خطر میافتد. OAuth2 این مشکل را با ارائه یک روش امنتر برای مجوز دسترسی حل میکند. OAuth2 به برنامه اجازه میدهد تا یک ‘توکن دسترسی’ (Access Token) را از سرویس دریافت کند. این توکن دسترسی، به برنامه اجازه میدهد تا به منابع محافظتشدهی کاربر دسترسی پیدا کند، بدون اینکه نیاز به دانستن نام کاربری و رمز عبور کاربر باشد.
اصطلاحات کلیدی OAuth2
برای درک بهتر OAuth2، باید با اصطلاحات کلیدی آن آشنا شوید:
- Resource Owner (مالک منبع): کاربری که منابع محافظتشده را در اختیار دارد.
- Client (مشتری): برنامهای که میخواهد به منابع محافظتشدهی کاربر دسترسی پیدا کند.
- Authorization Server (سرور مجوز): سروری که توکنهای دسترسی را صادر میکند.
- Resource Server (سرور منبع): سروری که منابع محافظتشده را میزبانی میکند.
- Access Token (توکن دسترسی): یک رشتهی رمزگذاریشده که به برنامه اجازه میدهد تا به منابع محافظتشدهی کاربر دسترسی پیدا کند.
- Refresh Token (توکن تازهسازی): یک رشتهی رمزگذاریشده که برای دریافت توکن دسترسی جدید استفاده میشود، بدون اینکه نیاز به تعامل مجدد با کاربر باشد.
- Scope (دامنه): مجموعهای از مجوزها که برنامه درخواست میکند.
انواع جریانهای OAuth2
OAuth2 چندین جریان مختلف برای مجوز دسترسی دارد. رایجترین جریانها عبارتند از:
- Authorization Code Grant: این جریان، امنترین و رایجترین جریان است. در این جریان، برنامه ابتدا یک کد مجوز (Authorization Code) را از سرویس دریافت میکند. سپس، برنامه با استفاده از کد مجوز، یک توکن دسترسی را از سرویس دریافت میکند.
- Implicit Grant: این جریان، برای برنامههای تکصفحهای (Single-Page Applications) مناسب است. در این جریان، برنامه مستقیماً توکن دسترسی را از سرویس دریافت میکند.
- Resource Owner Password Credentials Grant: این جریان، برای برنامههایی که به نام کاربری و رمز عبور کاربر دسترسی دارند، مناسب است. این جریان، به دلیل خطرات امنیتی، توصیه نمیشود.
- Client Credentials Grant: این جریان، برای برنامههایی که به نمایندگی از خودشان به منابع محافظتشده دسترسی پیدا میکنند، مناسب است.
پیادهسازی OAuth2 با استفاده از پایتون
برای پیادهسازی OAuth2 در پایتون، میتوان از کتابخانههای مختلفی استفاده کرد. یکی از محبوبترین کتابخانهها، کتابخانهی authlib است. این کتابخانه، پیادهسازیهای مختلفی از OAuth2 و OpenID Connect را ارائه میدهد.
نصب کتابخانه authlib
برای نصب کتابخانهی authlib، میتوانید از دستور زیر استفاده کنید:
pip install authlib
مثال: استفاده از Authorization Code Grant
در این مثال، نحوه استفاده از Authorization Code Grant را با استفاده از کتابخانهی authlib نشان میدهیم.
مرحله 1: پیکربندی Client
ابتدا، باید Client را پیکربندی کنید. این شامل تنظیم Client ID، Client Secret، Authorization Endpoint و Token Endpoint است.
from authlib.integrations.requests_client import OAuth2Session
client_id = 'YOUR_CLIENT_ID'
client_secret = 'YOUR_CLIENT_SECRET'
authorization_base_url = 'https://example.com/oauth/authorize'
token_url = 'https://example.com/oauth/token'
client = OAuth2Session(client_id, client_secret,
authorization_base_url=authorization_base_url,
token_url=token_url)
مرحله 2: دریافت Authorization Code
سپس، باید کاربر را به Authorization Endpoint هدایت کنید تا مجوز دسترسی را اعطا کند.
authorization_url, state = client.create_authorization_url(
authorization_base_url, redirect_uri='https://your-redirect-uri.com',
scope=['read', 'write'])
print('Please go to %s and authorize access.' % authorization_url)
مرحله 3: دریافت Token
پس از اینکه کاربر مجوز دسترسی را اعطا کرد، سرویس، کاربر را به Redirect URI شما هدایت میکند. Redirect URI شامل Authorization Code است. شما باید Authorization Code را به Token Endpoint ارسال کنید تا توکن دسترسی را دریافت کنید.
redirect_response = input('Paste the full redirect URL here:')
token = client.fetch_token(
token_url,
authorization_response=redirect_response
)
print(token)
مرحله 4: استفاده از Token
اکنون، میتوانید از توکن دسترسی برای دسترسی به منابع محافظتشدهی کاربر استفاده کنید.
import requests
protected_url = 'https://example.com/api/resource'
headers = {'Authorization': 'Bearer %s' % token['access_token']}
response = requests.get(protected_url, headers=headers)
print(response.json())
نکات امنیتی مهم
هنگام استفاده از OAuth2، باید به نکات امنیتی زیر توجه کنید:
- Client Secret را ایمن نگه دارید: Client Secret نباید در کد منبع برنامه ذخیره شود. بهتر است از متغیرهای محیطی (Environment Variables) برای ذخیره Client Secret استفاده کنید.
- Redirect URI را اعتبارسنجی کنید: Redirect URI باید به درستی اعتبارسنجی شود تا از حملات Cross-Site Request Forgery (CSRF) جلوگیری شود.
- Scope را محدود کنید: Scope باید به حداقل مجوزهای لازم محدود شود.
- از HTTPS استفاده کنید: تمام ارتباطات باید از طریق HTTPS انجام شود.
- توکنهای دسترسی را به طور منظم تازهسازی کنید: از Refresh Token برای دریافت توکن دسترسی جدید استفاده کنید.
نتیجهگیری
OAuth2 یک چارچوب مجوز قدرتمند و امن است که به برنامهها اجازه میدهد تا به منابع محافظتشدهی کاربر دسترسی پیدا کنند، بدون اینکه نیاز به به اشتراک گذاشتن نام کاربری و رمز عبور کاربر با آن برنامه باشد. با استفاده از کتابخانههایی مانند authlib، پیادهسازی OAuth2 در پایتون بسیار آسان است. با رعایت نکات امنیتی مهم، میتوانید از OAuth2 برای ایجاد برنامههای امن و قابل اعتماد استفاده کنید.

بدون دیدگاه