مستندات توسعه‌دهنده

همه چیز برای یکپارچه‌سازی احراز هویت بلینر در سایت یا اپ شما.

شروع سریع

در سه مرحله احراز هویت بلینر را به سایت خود اضافه کنید:

  1. ۱

    ثبت‌نام و ساخت اپ

    در داشبورد مرچنت ثبت‌نام کنید، یک اپ جدید بسازید و client_id و client_secret خود را دریافت کنید.

  2. ۲

    انتخاب روش یکپارچه‌سازی

    می‌توانید از جریان OIDC استاندارد یا از API مستقیم لینک احراز استفاده کنید.

  3. ۳

    دریافت اطلاعات کاربر

    پس از احراز هویت موفق، توکن حاوی اطلاعات هویتی کاربر (موبایل، کد ملی، سطح احراز) به سایت شما ارسال می‌شود.

یکپارچه‌سازی OIDC استاندارد

اگر سیستم شما از OpenID Connect پشتیبانی می‌کند (مثل WordPress، Laravel، Django)، از Discovery URL استفاده کنید:

https://belener.ir/.well-known/openid-configuration

جریان Authorization Code + PKCE

  1. ۱.کاربر را به /oidc/authorize با پارامترهای مناسب هدایت کنید.
  2. ۲.کاربر لاگین می‌کند و (در صورت نیاز) احراز هویت می‌شود.
  3. ۳.هدایت به redirect_uri با پارامتر code.
  4. ۴.تبادل code با token در /oidc/token (server-side).
  5. ۵.استفاده از access_token برای دریافت اطلاعات از /oidc/userinfo.

Scope ها

ScopeClaims دریافتی
openidsub (همیشه الزامی)
profilename, given_name, family_name
mobilephone_number, phone_number_verified
national_idnational_id (اگر احراز شده باشد)
verification_levelverification_level (سطح ۰ تا ۳)
PKCE (Proof Key for Code Exchange) با روش S256 الزامی است. بدون code_challenge درخواست رد می‌شود.

مرجع API

EndpointMethodاحراز هویتتوضیح
/.well-known/openid-configurationGETOIDC Discovery
/oidc/authorizeGETشروع جریان OAuth
/oidc/tokenPOSTclient_secretدریافت access/id token
/oidc/userinfoGETBearer tokenاطلاعات کاربر
/oidc/jwksGETکلیدهای عمومی JWT
/api/v1/verifyPOSTclient_id + secretساخت لینک احراز مستقیم
/api/v1/queue-statusGETوضعیت صف احراز هویت

سطوح احراز هویت

هر سطح مشخص می‌کند چه scope‌هایی باید درخواست شوند و چه claims‌هایی در پاسخ برمی‌گردند. scope openid همیشه الزامی است و در همه سطوح وجود دارد.

۰

احراز نشده

کاربر هنوز هیچ اطلاعاتی ارائه نداده است.

۱

موبایل تأیید‌شده

تأیید شماره موبایل از طریق OTP پیامکی

۲,۰۰۰ تومان

Scopes موردنیاز

openidprofilemobilenational_id

Claims دریافتی

subnamephone_numbernational_id
scope="openid profile mobile national_id"
۲

کارت ملی

تطابق کد ملی، نام، نام خانوادگی و عکس کارت ملی

۲۰,۰۰۰ تومان

Scopes موردنیاز

openidprofilemobilenational_idverification_level

Claims دریافتی

subnamephone_numbernational_idverification_level
scope="openid profile mobile national_id verification_level"
۳

ویدیویی (کامل)

همه مراحل سطح ۲ به‌علاوه ویدیو سلفی با جمله احراز هویت

۵۰,۰۰۰ تومان

Scopes موردنیاز

openidprofilemobilenational_idverification_level

Claims دریافتی

subnamephone_numbernational_idverification_level
scope="openid profile mobile national_id verification_level"
هزینه بر اساس اولین احراز هر کاربر محاسبه می‌شود. دسترسی مجدد همان کاربر در سرویس‌های دیگر ۵,۰۰۰ تومان (دسترسی مجدد) دارد.

کدهای نمونه — یکپارچه‌سازی OIDC

نمونه‌کد کامل برای فریم‌ورک‌ها و زبان‌های مختلف. همه از Discovery URL و استاندارد OIDC استفاده می‌کنند.

import { Issuer, generators } from 'openid-client';

const issuer = await Issuer.discover('https://belener.ir');
const client = new issuer.Client({
  client_id: 'cl_YOUR_CLIENT_ID',
  client_secret: 'YOUR_CLIENT_SECRET',
  redirect_uris: ['https://yoursite.ir/callback'],
  response_types: ['code'],
});

// ۱. هدایت کاربر به صفحه احراز
const code_verifier = generators.codeVerifier();
const code_challenge = generators.codeChallenge(code_verifier);
const url = client.authorizationUrl({
  scope: 'openid profile mobile national_id verification_level',
  code_challenge,
  code_challenge_method: 'S256',
});
res.redirect(url);

// ۲. در callback: دریافت توکن
const params = client.callbackParams(req);
const tokenSet = await client.oauthCallback(
  'https://yoursite.ir/callback',
  params,
  { code_verifier }
);
const user = tokenSet.claims(); // { sub, phone_number, name, verification_level }
همه‌ی فریم‌ورک‌هایی که OIDC / OAuth 2.0 پشتیبانی می‌کنند با بلینر سازگارند. Discovery URL: https://belener.ir/.well-known/openid-configuration

نکات امنیتی

  • هرگز client_secret را در کد فرانت‌اند، مخزن عمومی یا لاگ‌ها قرار ندهید.
  • ارتباط با API فقط از HTTPS با TLS 1.2+ باشد.
  • client_secret را هر ۹۰ روز یا پس از هر رویداد امنیتی تغییر دهید.
  • پارامتر state را در جریان OIDC برای جلوگیری از CSRF تأیید کنید.
  • IP سرورهایی که با client_secret تماس می‌گیرند را در فایروال محدود کنید.
  • result_token را در سرور تأیید کنید — هرگز در کلاینت به آن اعتماد نکنید.
  • برای احراز سطح ۳ (ویدیویی)، مطمئن شوید محتوای ویدیو ارسال‌شده مطابق دستورالعمل است.