راهنمای احراز هویت
SDK از سه روش اصلی احراز هویت پشتیبانی میکند و تمام احراز هویت از طریق آبجکتهای احراز هویت که رابط BaseAuth را پیادهسازی میکنند، مدیریت میشود.
- توکن دسترسی شخصی - برای برنامههای شخصی و اختصاصی
- جریان کد مجوز - برای سناریوهای احراز هویت کاربر در پلتفرمهای Third-Party
- اعتبارنامههای کلاینت - برای برنامههای با ماهیت و دسترسی حقوقی
برای توضیحات بیشتر درمورد روشهای احراز هویت به سند احراز هویت در API باسلام مراجعه کنید.
فهرست مطالب
توکن دسترسی شخصی
در توسعه برنامههای شخصی برای یک غرفه و کاربر، بعد از دریافت توکن دسترسی از پنل توسعهدهندگان ، میتوانید مشخصات توکن دریافت شده را توسط PersonalToken مدیریت کنید.
from basalam_sdk import BasalamClient, PersonalToken
def personal_token_example():
# مقداردهی اولیه با توکنهای موجود
auth = PersonalToken(
token="your_access_token",
refresh_token="your_refresh_token",
)
# ایجاد کلاینت احراز هویت شده
client = BasalamClient(auth=auth)
# دریافت اطلاعات کاربر جاری
user = client.get_current_user()
return userجریان کد مجوز (برای احراز هویت کاربر)
در زمان پیادهسازی یک برنامه Third-Party که نیازمند دریافت مجوز و دسترسی از کاربران است، بعد از ساخت کلاینت برنامه در پنل توسعهدهندگان ، از طریق کلاس AuthorizationCode برای مدیریت فرآیند دریافت مجوز از کاربر اقدام کنید.
from basalam_sdk import BasalamClient, AuthorizationCode, Scope
# مرحله ۱: ایجاد شیء احراز هویت
auth = AuthorizationCode(
client_id="your-client-id",
client_secret="your-client-secret",
redirect_uri="https://your-app.com/callback",
scopes=[
Scope.CUSTOMER_WALLET_READ,
Scope.CUSTOMER_ORDER_READ
]
)
# مرحله ۲: دریافت URL مجوز
auth_url = auth.get_authorization_url(state="optional_state_parameter")
print(f"Visit: {auth_url}")
# مرحله ۳: تبادل کد با توکنها (بعد از دریافت کد از کاربر از آدرس برگشتی ثبتشده در کلاینت)
token_info = auth.get_token(code="authorization_code_from_callback")
# مرحله ۴: ایجاد کلاینت احراز هویت شده
client = BasalamClient(auth=auth)مثال استفاده
from flask import Flask, request, redirect
app = Flask(__name__)
@app.route('/login')
def login():
auth = AuthorizationCode(
client_id="your-client-id",
client_secret="your-client-secret",
redirect_uri="https://your-app.com/callback"
)
auth_url = auth.get_authorization_url(state="user_session_id")
return redirect(auth_url)
@app.route('/callback')
async def callback():
code = request.args.get('code')
state = request.args.get('state')
auth = AuthorizationCode(
client_id="your-client-id",
client_secret="your-client-secret",
redirect_uri="https://your-app.com/callback"
)
# تبادل کد با توکنها
token_info = await auth.get_token(code=code)
# ذخیره امن توکنها
# ... ذخیره token_info.access_token, token_info.refresh_token
return "Authentication successful!"اعتبارنامه کلاینت
برای استفاده از APIهایی با ماهیت حقوقی مانند کیف پول، پس از احراز هویت کلاینت ساخته شده با grant_type="client_credentials" با استفاده از کلاس ClientCredentials برای استفاده از متدهای مربوطه اقدام کنید.
پیکربندی اولیه
from basalam_sdk import BasalamClient, ClientCredentials
# احراز هویت پایه
auth = ClientCredentials(
client_id="your-client-id",
client_secret="your-client-secret",
scopes=[
Scope.CUSTOMER_WALLET_READ,
Scope.VENDOR_PRODUCT_WRITE
]
)
# ایجاد کلاینت
client = BasalamClient(auth=auth)مثال استفاده
async def client_credentials_example():
auth = ClientCredentials(
client_id="your-client-id",
client_secret="your-client-secret"
)
client = BasalamClient(auth=auth)
# دریافت موجودی کاربر
balance = await client.get_balance(user_id=123)
return balanceمدیریت توکن
دریافت اطلاعات توکن
def token_management_example():
auth = ClientCredentials(
client_id="your-client-id",
client_secret="your-client-secret"
)
# دریافت توکن - اگر منقضی نشده باشد از توکن موجود استفاده میکند
token_info = auth.get_token()
return token_infoمحدودههای دسترسی
محدودههای دسترسی تعریف میکنند که برنامه شما چه مجوزهایی دارد. علاوه بر سند دسترسیها، در SDK نیز لیست دسترسیها توسط کلاس Scope فراهم شده است. محدودههای موجود شامل:
from basalam_sdk import Scope
# محدودههای رایج
Scope.CUSTOMER_WALLET_READ # خواندن کیف پول مشتری
Scope.CUSTOMER_WALLET_WRITE # نوشتن در کیف پول مشتری
Scope.VENDOR_PRODUCT_READ # خواندن محصولات غرفهدار
Scope.VENDOR_PRODUCT_WRITE # نوشتن محصولات غرفهدار
Scope.CUSTOMER_ORDER_READ # خواندن سفارشات مشتری
Scope.CUSTOMER_ORDER_WRITE # نوشتن سفارشات مشتریاستفاده از محدودهها
from basalam_sdk import ClientCredentials, Scope
auth = ClientCredentials(
client_id="your-client-id",
client_secret="your-client-secret",
scopes=[
Scope.CUSTOMER_WALLET_READ,
Scope.VENDOR_PRODUCT_WRITE,
Scope.CUSTOMER_ORDER_READ
]
)