همه چیز برای یکپارچهسازی احراز هویت بلینر در سایت یا اپ شما.
در سه مرحله احراز هویت بلینر را به سایت خود اضافه کنید:
ثبتنام و ساخت اپ
در داشبورد مرچنت ثبتنام کنید، یک اپ جدید بسازید و client_id و client_secret خود را دریافت کنید.
انتخاب روش یکپارچهسازی
میتوانید از جریان OIDC استاندارد یا از API مستقیم لینک احراز استفاده کنید.
دریافت اطلاعات کاربر
پس از احراز هویت موفق، توکن حاوی اطلاعات هویتی کاربر (موبایل، کد ملی، سطح احراز) به سایت شما ارسال میشود.
سادهترین روش: یک لینک شخصیسازیشده برای کاربر بسازید و او را به آنجا هدایت کنید. نیازی به پیادهسازی OIDC ندارید.
| پارامتر | نوع | توضیح |
|---|---|---|
| client_id | string | شناسه اپ شما |
| client_secret | string | کلید محرمانه اپ (فقط server-side) |
| redirect_url | string (URL) | آدرس بازگشت پس از احراز |
| level | 1 | 2 | 3 | سطح احراز موردنیاز |
{
"verify_url": "https://belener.ir/verify/uuid",
"session_id": "uuid",
"expires_at": "2024-01-01T12:30:00Z"
}لینک verify_url را به کاربر نمایش دهید یا مستقیماً redirect کنید. اعتبار لینک ۳۰ دقیقه است.
پس از احراز هویت موفق، کاربر به redirect_url با پارامتر ?result_token=... برمیگردد.
Result token یک JWT با امضای HS256 است. برای تأیید از کلید AUTH_SECRET استفاده کنید. محتوای payload:
{
"sub": "user-uuid", // شناسه کاربر
"level": 2, // سطح احراز
"sessionId": "session-uuid",
"iat": 1704067200,
"exp": 1704067800 // ۱۰ دقیقه اعتبار
}// API مستقیم: ساخت لینک احراز هویت اختصاصی
const res = await fetch('https://belener.ir/api/v1/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
client_id: 'cl_YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
redirect_url: 'https://yoursite.ir/kyc-callback',
level: 2, // سطح احراز موردنیاز: 1، 2، یا 3
}),
});
const { verify_url, session_id, expires_at } = await res.json();
// کاربر را به verify_url هدایت کنید
// پس از احراز هویت، به redirect_url با ?result_token=... باز میگردد
// تأیید result_token در سرور
import { jwtVerify } from 'jose';
const secret = new TextEncoder().encode(process.env.AUTH_SECRET);
const { payload } = await jwtVerify(result_token, secret);
// payload: { sub: userId, level: 2, sessionId }اگر سیستم شما از OpenID Connect پشتیبانی میکند (مثل WordPress، Laravel، Django)، از Discovery URL استفاده کنید:
https://belener.ir/.well-known/openid-configuration
/oidc/authorize با پارامترهای مناسب هدایت کنید.redirect_uri با پارامتر code./oidc/token (server-side)./oidc/userinfo.| Scope | Claims دریافتی |
|---|---|
| openid | sub (همیشه الزامی) |
| profile | name, given_name, family_name |
| mobile | phone_number, phone_number_verified |
| national_id | national_id (اگر احراز شده باشد) |
| verification_level | verification_level (سطح ۰ تا ۳) |
| Endpoint | Method | احراز هویت | توضیح |
|---|---|---|---|
| /.well-known/openid-configuration | GET | — | OIDC Discovery |
| /oidc/authorize | GET | — | شروع جریان OAuth |
| /oidc/token | POST | client_secret | دریافت access/id token |
| /oidc/userinfo | GET | Bearer token | اطلاعات کاربر |
| /oidc/jwks | GET | — | کلیدهای عمومی JWT |
| /api/v1/verify | POST | client_id + secret | ساخت لینک احراز مستقیم |
| /api/v1/queue-status | GET | — | وضعیت صف احراز هویت |
هر سطح مشخص میکند چه scopeهایی باید درخواست شوند و چه claimsهایی در پاسخ برمیگردند. scope openid همیشه الزامی است و در همه سطوح وجود دارد.
احراز نشده
کاربر هنوز هیچ اطلاعاتی ارائه نداده است.
موبایل تأییدشده
تأیید شماره موبایل از طریق OTP پیامکی
Scopes موردنیاز
Claims دریافتی
کارت ملی
تطابق کد ملی، نام، نام خانوادگی و عکس کارت ملی
Scopes موردنیاز
Claims دریافتی
ویدیویی (کامل)
همه مراحل سطح ۲ بهعلاوه ویدیو سلفی با جمله احراز هویت
Scopes موردنیاز
Claims دریافتی
نمونهکد کامل برای فریمورکها و زبانهای مختلف. همه از 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 }https://belener.ir/.well-known/openid-configuration