OAuth برای CLI
فلوی OAuth 2.0 با PKCE که AiraCode CLI برای ورود استفاده میکنه.
aira login از OAuth 2.0 با PKCE استفاده میکنه. CLI یک مرورگر باز میکنه، authorization code رو روی یک callback از نوع loopback میگیره، اون رو با توکنها exchange میکنه، و نتیجه رو توی credential store امن محلی ذخیره میکنه.
فلو
- CLI یک listener از نوع loopback روی
http://localhost:<PORT>/callbackراه میاندازه. - یک
code_verifierتصادفی و یکcode_challengeاز نوع SHA-256 میسازه. - مرورگر
https://app.airachat.ir/api/auth/oauth/authorizeرو باز میکنه. - کاربر درخواست AiraCode CLI رو توی آیراچت تأیید میکنه.
- مرورگر با
codeوstateبرمیگرده. - CLI مقدار
codeبههمراهcode_verifierرو به/auth/oauth/tokenمیفرسته. - سرور PKCE رو verify میکنه و یک access token بههمراه refresh token برمیگردونه.
Endpointها
GET /auth/oauth/authorize
client_id=airacode-cliresponse_type=coderedirect_uri=http://localhost:<PORT>/callbackorhttps://airacode.ir/oauth/manual-redirectcode_challenge=<base64url(sha256(code_verifier))>code_challenge_method=S256state=<random>scope=user:inference user:profile user:sessions:airacode
POST /auth/oauth/token
POST /auth/oauth/token
Content-Type: application/json
{
"grant_type": "authorization_code",
"code": "<code from redirect>",
"code_verifier": "<original PKCE verifier>",
"redirect_uri": "http://localhost:9876/callback",
"client_id": "airacode-cli"
}refresh tokenها از همین endpoint استفاده میکنن:
POST /auth/oauth/token
Content-Type: application/json
{
"grant_type": "refresh_token",
"refresh_token": "<previous refresh>",
"client_id": "airacode-cli"
}GET /auth/oauth/profile
curl -H "Authorization: Bearer $AIRA_API_KEY" \ https://app.airachat.ir/api/auth/oauth/profile
POST /auth/oauth/revoke
curl -X POST \ -d "token=<refresh-token>" \ https://app.airachat.ir/api/auth/oauth/revoke
استفاده از این توی اپ خودت
فعلاً clientهای OAuth جدید باید دستی ثبت بشن. با نام اپت، redirect URIها، و scopeهای موردنیاز به info@airachat.ir ایمیل بزن.