OpenID Connect: چیست، پروتکل احراز هویت و مجوزدهی

نویسنده: IT Sectr منتشر شده: 2026-04-05 زمان مطالعه: 9 دقیقه

OpenID Connect — یک پروتکل احراز هویت است که بر روی OAuth 2.0 ساخته شده و لایه تأیید هویت کاربر را به مجوزدهی استاندارد اضافه می‌کند. بر خلاف OAuth 2.0 خالص، که در آن access token بدون اطلاعات کاربر به منابع دسترسی می‌دهد، OpenID Connect یک ID Token — JWT با داده‌های تأیید شده پروفایل — برمی‌گرداند. طبق داده‌های OpenID Foundation، 2026، این پروتکل توسط همه ارائه‌دهندگان بزرگ Identity Provider — Google، Apple، Microsoft و Auth0 پشتیبانی می‌شود.

مهمترین

  • OpenID Connect — پروتکل احراز هویت روی OAuth 2.0 که ID Token برمی‌گرداند
  • ID Token — JWT با claims درباره کاربر: شناسه، ایمیل، نام، آواتار
  • Authorisation Code Flow — جریان اصلی OIDC برای برنامه‌های موبایل و سرور
  • Single Sign-On — کاربر یک بار از طریق Identity Provider وارد می‌شود و به همه برنامه‌های متصل دسترسی پیدا می‌کند
  • Discovery URL — endpoint استاندارد /.well-known/openid-configuration برای دریافت پیکربندی ارائه‌دهنده

OpenID Connect چیست؟

OpenID Connect (OIDC) — یک پروتکل باز احراز هویت است که به عنوان لایه‌ای روی OAuth 2.0 ساخته شده است. آنچه را که در OAuth 2.0 کم بود استاندارد می‌کند: تأیید هویت کاربر. اگر OAuth 2.0 به این سؤال پاسخ می‌دهد که «کدام برنامه دسترسی دارد؟»، OIDC به این سؤال پاسخ می‌دهد که «این کاربر دقیقاً کیست؟».

این پروتکل از ID Token — JSON Web Token (JWT) استفاده می‌کند که مجموعه‌ای از claims را شامل می‌شود: شناسه یکتای موضوع، ایمیل، نام، آواتار، زمان‌های صدور و انقضا. برنامه مشتری می‌تواند ID Token را به صورت رمزنگاری تأیید کند — سرور توکن را با RS256 یا ES256 امضا می‌کند و مشتری امضا را با کلید عمومی دریافت شده از طریق JWKS endpoint بررسی می‌کند.

طبق داده‌های Auth0، 2025، بیش از 78٪ از برنامه‌های موبایلی که از احراز هویت شخص ثالث استفاده می‌کنند، OIDC را از طریق Google Sign-In یا Sign in with Apple به کار می‌برند. این پروتکل را به استاندارد دوفاکتو برای ورود اجتماعی و احراز هویت شرکتی تبدیل می‌کند.

OpenID Connect چگونه کار می‌کند

OpenID Connect بسته به نوع مشتری چندین جریان (flow) تعریف می‌کند. برای برنامه‌های موبایل، استاندارد Authorisation Code Flow با Proof Key for Code Exchange (PKCE) است — حتی بدون client secret روی دستگاه محافظت می‌کند.

ارائه‌دهنده هویت و نقش آن

Identity Provider (IdP) — سروری است که احراز هویت کاربر را انجام می‌دهد و توکن‌ها را صادر می‌کند. در اکوسیستم OIDC، IdP دو endpoint کلیدی ارائه می‌دهد: Authorisation Endpoint برای ورود کاربر و Token Endpoint برای تبادل کد با توکن. مشتری آدرس این endpointها را از طریق Discovery URL — مسیر استاندارد /.well-known/openid-configuration که یک سند JSON با تمام پیکربندی ارائه‌دهنده برمی‌گرداند — پیدا می‌کند.

هر IdP JWKS (JSON Web Key Set) خود را منتشر می‌کند — مجموعه کلیدهای عمومی برای تأیید امضای ID Token. مشتری این کلیدها را ذخیره می‌کند و از آنها برای تأیید هر توکن دریافتی بدون مراجعه به سرور استفاده می‌کند.

Authorisation Code Flow با PKCE

Authorisation Code Flow — یک فرایند سه مرحله‌ای است. ابتدا برنامه موبایل یک code verifier (رشته تصادفی به طول ۴۳–۱۲۸ کاراکتر) و hash آن یعنی code challenge تولید می‌کند. برنامه مرورگر یا WebView را با URL حاوی client_id، redirect_uri، scope (openid profile email) و code challenge باز می‌کند. کاربر اطلاعات ورود را در صفحه IdP وارد کرده و رضایت را تأیید می‌کند. IdP مرورگر را با authorisation code به برنامه برمی‌گرداند.

در مرحله دوم، برنامه authorisation code، code verifier و client_id را به Token Endpoint سرور ارسال می‌کند. سرور code verifier را در برابر code challenge ذخیره شده بررسی می‌کند و ID Token، Access Token و به صورت اختیاری Refresh Token را برمی‌گرداند. در مرحله سوم، برنامه ID Token را تأیید می‌کند: امضا را از طریق JWKS تأیید، issuer (iss)، audience (aud) و زمان انقضا (exp) را بررسی می‌کند. اگر تأیید موفق باشد — کاربر احراز هویت شده در نظر گرفته می‌شود.

PKCE (Proof Key for Code Exchange) آسیب‌پذیری ذاتی Authorisation Code Flow استاندارد در مشتریان عمومی را برطرف می‌کند. از آنجا که برنامه موبایل نمی‌تواند client secret را به صورت امن ذخیره کند، مهاجمی که authorisation code را رهگیری کرده می‌توانست آن را با توکن مبادله کند. Code verifier این مشکل را حل می‌کند: حتی اگر کد رهگیری شود، بدون code verifier اصلی تبادل امکان‌پذیر نیست. OAuth Security Best Practices (RFC 9700) برای همه مشتریان عمومی از جمله برنامه‌های موبایل PKCE را الزامی می‌کند.

ID Token و Access Token

OpenID Connect دو توکن اساساً متفاوت برمی‌گرداند: ID Token و Access Token. ID Token — همیشه JWT است که مشتری می‌تواند آن را به طور مستقل بخواند و تأیید کند. این توکن حاوی اطلاعاتی درباره کاربر است و برای احراز هویت استفاده می‌شود، نه برای دسترسی به API.

ساختار ID Token

ID Token از header، payload و signature تشکیل شده که در Base64 کدگذاری شده و با نقطه از هم جدا شده‌اند. Header شامل alg (الگوریتم امضا) و kid (شناسه کلید) است. Payload شامل claims اجباری است: iss (issuer — صادرکننده توکن)، sub (subject — ID یکتای کاربر)، aud (audience — شناسه مشتری)، exp (expiration)، iat (issued at). به صورت اختیاری — name، email، picture، locale.

نمونه payload رمزگشایی شده ID Token از Google:

json
{
  "iss": "https://accounts.google.com",
  "sub": "1234567890",
  "aud": "my-app-123.apps.googleusercontent.com",
  "exp": 1812345678,
  "iat": 1812342078,
  "name": "ایوان پتروف",
  "email": "ivan@example.com"
}

Access Token — یک opaque token (رشته دلخواه) یا JWT است که مشتری در درخواست‌های API ارسال می‌کند. بر خلاف ID Token، access Token برای خواندن توسط مشتری طراحی نشده است — قالب و محتوای آن فقط برای سرور منابع و سرور مجوزدهی شناخته شده است. Access Token دارای scope — محدودیت حقوق دسترسی — و عمر کوتاه، معمولاً ۱۵–۶۰ دقیقه است.

تفاوت‌های OpenID Connect با OAuth 2.0

OAuth 2.0 — یک چارچوب مجوزدهی است که تعیین می‌کند برنامه چگونه به منابع کاربر دسترسی پیدا می‌کند. OpenID Connect — لایه‌ای است که احراز هویت را به این فرایند اضافه می‌کند. تفاوت کلیدی: OAuth 2.0 قالب توکن را تعیین نمی‌کند و به برنامه راهی برای اینکه بفهمد دقیقاً چه کسی درخواست را انجام داده نمی‌دهد.

پارامترOAuth 2.0OpenID Connect
هدفمجوزدهی دسترسی به منابعاحراز هویت + مجوزدهی
توکن هویتنداردID Token (JWT)
Scopeapi:read، api:writeopenid، profile، email
UserInfo endpointاختیاریاستاندارد شده
Single Logoutنداردمشخصات OpenID Connect Session Management

چه زمانی OpenID Connect را انتخاب کنیم

OpenID Connect زمانی ضروری است که برنامه نیاز دارد کاربر را بشناسد، نه اینکه فقط به داده‌های او دسترسی داشته باشد. اگر از «ورود با Google» یا «Sign in with Apple» استفاده می‌کنید — این OIDC است. اگر برنامه شما API شخص ثالث را از طرف کاربر بدون نیاز به دانستن هویت او فراخوانی می‌کند — OAuth 2.0 خالص کافی است. برای سیستم‌های شرکتی با Single Sign-On (SSO) انتخاب یک‌طرف است: فقط OpenID Connect، زیرا خروج و مدیریت جلسه استاندارد شده ارائه می‌دهد.

پیاده‌سازی OpenID Connect در برنامه‌های موبایل

ادغام OpenID Connect در برنامه موبایل نیاز به انتخاب کتابخانه مناسب و پیکربندی صحیح جریان دارد. برای Android از credential manager (AndroidX Credentials) یا کتابخانه AppAuth استفاده می‌شود. برای iOS — چارچوب AuthenticationServices با ASWebAuthenticationSession.

نمونه کد در Kotlin (Android)

در زیر نمونه‌ای از اجرای Authorisation Code Flow با استفاده از کتابخانه AppAuth-Android آورده شده است. برنامه یک درخواست مجوزدهی ایجاد می‌کند، مرورگر را برای ورود کاربر باز می‌کند و callback با توکن‌ها را پردازش می‌کند.

kotlin
val authRequest = AuthorizationRequest.Builder(
    serviceConfig,
    clientId,
    "code",
    Uri.parse("com.example.app:/oauth")
)
.setScope("openid profile email")
.build()

val authService = AuthorizationService(this)
val intent = authService.getAuthorizationRequestIntent(authRequest)
startActivityForResult(intent, REQUEST_CODE)

override fun onActivityResult(
    requestCode: Int,
    resultCode: Int,
    data: Intent?
) {
    if (requestCode == REQUEST_CODE) {
        val response = AuthorizationResponse.fromIntent(data)
        if (response?.authorizationCode != null) {
            exchangeCodeForTokens(response.authorizationCode)
        }
    }
}

نمونه کد در Swift (iOS)

ASWebAuthenticationSession از Apple یک مرورگر داخلی برای جریان OIDC با پشتیبانی SSO از طریق iCloud Keychain ارائه می‌دهد. جلسه با URL مجوزدهی شروع می‌شود و callback از طریق completion handler پردازش می‌شود.

هنگام انتخاب کتابخانه برای OpenID Connect، پشتیبانی از PKCE را به صورت پیش‌فرض در نظر بگیرید: AppAuth-Android و AppAuth-iOS به طور پیش‌فرض از PKCE پشتیبانی می‌کنند. Firebase Authentication در زیرساخت خود برای Google Sign-In، Sign in with Apple و Microsoft از OIDC استفاده می‌کند — توسعه‌دهنده نیازی به پیاده‌سازی دستی جریان ندارد. برای سیستم‌های شرکتی با IdP اختصاصی (مانند Keycloak یا Okta)، AppAuth انتخاب استاندارد با کنترل کامل بر پیکربندی و مدیریت خطا باقی می‌ماند.

swift
let authURL = URL("https://accounts.google.com/o/oauth2/v2/auth")!
let callbackURL = URL("com.example.app://oauth")!

let session = ASWebAuthenticationSession(
    url: authURL,
    callbackURLScheme: callbackURL.scheme!
) { url, error in
    guard let url = url else { return }
    let components = URLComponents(url: url)
    let code = components?.queryItems?.first(where: { $0.name == "code" })?.value
    if let code = code { exchangeCode(code) }
}
session.start()

سوالات متداول

OpenID Connect چه تفاوتی با OAuth 2.0 دارد؟

OpenID Connect — لایه‌ای روی OAuth 2.0 است که احراز هویت را اضافه می‌کند. OAuth 2.0 فقط مسئول مجوزدهی دسترسی به منابع است. OIDC ID Token — JWT با داده‌های کاربر را معرفی می‌کند، UserInfo endpoint را استاندارد می‌کند و قابلیت‌های Single Sign-On و خروج را اضافه می‌کند.

کدام جریان OIDC برای برنامه‌های موبایل مناسب است؟

برای برنامه‌های موبایل Authorisation Code Flow با PKCE توصیه می‌شود. نیاز به client secret ندارد، از رهگیری authorisation code محافظت می‌کند و توسط همه ارائه‌دهندگان بزرگ Identity Provider پشتیبانی می‌شود. Implicit Flow منسوخ شده و نباید در پروژه‌های جدید استفاده شود.

چگونه ID Token را در سمت مشتری تأیید کنیم؟

ID Token در سه مرحله تأیید می‌شود: تأیید امضا با کلید عمومی از JWKS endpoint، بررسی claims (iss، aud، exp) و رمزگشایی payload. اکثر SDKها — AppAuth، MSAL، Google Sign-In — این تأیید را به طور خودکار هنگام دریافت توکن انجام می‌دهند.

scope «openid» در درخواست به چه معناست؟

Scope openid — پارامتر اجباری است که درخواست OIDC را از OAuth 2.0 معمولی متمایز می‌کند. بدون آن، سرور ID Token را برنمی‌گرداند. scopeهای اضافی — profile، email، address — تعیین می‌کنند که کدام claims خاص درباره کاربر در توکن گنجانده شود.

آیا می‌توان از OpenID Connect بدون مرورگر استفاده کرد؟

از نظر فنی — بله، از طریق جریان Resource Owner Password Credentials، اما توصیه نمی‌شود. جریان مرورگر جداسازی اطلاعات ورود را تضمین می‌کند — برنامه هرگز رمز عبور کاربر را نمی‌بیند. Apple و Google برای سرویس‌های خود احراز هویت مرورگری را الزامی می‌کنند.

خلاصه

  • OpenID Connect — پروتکل احراز هویت روی OAuth 2.0 با ID Token در قالب JWT
  • ID Token حاوی claims تأیید شده درباره کاربر است و توسط سرور امضا می‌شود
  • Authorisation Code Flow با PKCE — جریان استاندارد و امن برای برنامه‌های موبایل
  • Identity Provider Discovery URL و JWKS را برای پیکربندی خودکار مشتری منتشر می‌کند
  • OIDC از Single Sign-On و خروج استاندارد شده بین برنامه‌ها پشتیبانی می‌کند
  • AppAuth و AuthenticationServices — کتابخانه‌های اصلی برای Android و iOS به ترتیب
  • OpenID Connect در Google Sign-In، Sign in with Apple و راه‌حل‌های SSO شرکتی استفاده می‌شود

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید