پایتون
احراز هویت

راهنمای احراز هویت

SDK از سه روش اصلی احراز هویت پشتیبانی می‌کند و تمام احراز هویت از طریق آبجکت‌های احراز هویت که رابط BaseAuth را پیاده‌سازی می‌کنند، مدیریت می‌شود.

  • توکن دسترسی شخصی - برای برنامه‌های شخصی و اختصاصی
  • جریان کد مجوز - برای سناریوهای احراز هویت کاربر در پلتفرم‌های Third-Party
  • اعتبارنامه‌های کلاینت - برای برنامه‌های با ماهیت و دسترسی حقوقی

برای توضیحات بیشتر درمورد روش‌‌های احراز هویت به سند احراز هویت در API باسلام مراجعه کنید.

فهرست مطالب

توکن دسترسی شخصی

در توسعه برنامه‌های شخصی برای یک غرفه و کاربر، بعد از دریافت توکن دسترسی از پنل توسعه‌دهندگان (opens in a new tab)، می‌توانید مشخصات توکن دریافت شده را توسط 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 که نیازمند دریافت مجوز و دسترسی از کاربران است، بعد از ساخت کلاینت برنامه در پنل توسعه‌دهندگان (opens in a new tab)، از طریق کلاس 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
    ]
)