روش احرازهویت جهت ارتباط پایدار و امن #
ارتباط احراز هویت درخواست کننده ها در سامانه ایرپلاس در دو مرحله انجام میشود
مرحله اول دریافت توکن اختصاصی و مدت دار که جهت رمزنگاری بسته ها و بازگشایی توسط هسته مرکزی استفاده میشود که در بخش “دریافت توکن ارتباطی (دستی و خودکار)” انجام میگردد.
مرحله دوم شامل تولید توکن JWT با استفاده از اطلاعات درخواست کننده و توکن دریافت شده در مرحله اول انجام میگردد که در بخش “ساخت توکن ارتباطی JWT“
دریافت توکن ارتباطی (دستی و خودکار) #
جهت دریافت توکن سازمانی شما از دو روش میتوانید اقدام نمائید.
روش اول: روش دستی – اخذ از طریق پنل کاربری #
در این روش شما میتوانید با مراجعه به بخش میز مدیریتی > توکن اتصال و گزینه ساخت توکن اقدام به دریافت توکن نمائید.
توجه داشته باشید که توکن های دریافتی در بازه زمانی های 1 روزه، 1هفته، 15روزه، 1 ماهه و 3 ماهه عرضه میگردد که همراه با توکن تاریخ انقضأ آن درج خواهد شد شما در هر زمان میتوانید توکن خود را دوباره تولید نمائید و توکن قبلی را منقضی نمائید.
روش دوم: دریافت از طریق API #
عنوان | وضعیت | مقادیر | توضیحات |
Method | اجباری | GET | متد ارسال درخواست |
Domain | اجباری | نام دامنه ثبت شده در اتوماسیون | |
Api Url | اجباری | دامنه هسته مرکزی سرویس | |
Api version | اجباری | به نسخه فعلی سرویس API تلقی میشود که در قسمت پیش نیازهای اتوماسیون به ریز شرح داده شده است. |
در این روش شما باید درخواست خود را از طریق لینک زیر ارسال فرمائید.
سربرگ – Header #
{{Api Url}}/token
HEADER
GET /api/reservation/{{Api version}}/token HTTP/1.1
Host: {{Your Host}}
Content-Type: application/json
Domain: {{Your Domain}}
JSONAPI Url از طریق پنل کاربری قابل مشاهده خواهد بود
مقادیر ارسالی – Request Data #
عنوان | نوع | وضعیت | مقادیر | توضیحات |
username | String | اجباری | نام کاربری دریافت شده | نام کاربری |
password | String | اجباری | کلمه عبور | هش شده با پروتکل SHA256 |
period | Integer | اختیاری | 1, 7, 15, 30, 90 | دوره انقضأ توکن بر اساس روز |
{
"username": "", //Username
"password": "", //Password - Encrypted with SHA 256 protocol
"period": 15 // 1, 7, 15, 30, 90
}
JSONپاسخ صحیح – Response True #
عنوان | نوع | مقادیر | توضیحات |
payload | Object | ||
payload.token | String | توکن دریافت شده | یک توکن 64 کاراکتری می باشد |
payload.expiration | String | زمان انقضأ توکن | این زمان بر اساس الگو ISO8601 YYYY-MM-DDTHH:mm:ss.SSSZ |
meta | Object | ||
meta.timestamp | Timestamp | زمان تولید پاسخ | این زمان بر اساس timestamp می باشد – در صورت نیاز از این زمان استفاده شود. |

{
"payload": {
"token": "64 character token received",
"expiration": "Expiration date and time - Gregorian calendar ISO8601"
},
"meta": {
"timestamp": "Timestamp" // Timestamp
}
}
JSONپاسخ نادرست – Response False #
عنوان | نوع | مقادیر | توضیحات |
error | Object | ||
error.code | Integer | شماره خطا مربوطه | جهت استعلام خطا میتوانید از طریق این لینک اقدام کنید. |
meta | Object | ||
meta.timestamp | Timestamp | زمان تولید پاسخ | این زمان بر اساس timestamp می باشد – در صورت نیاز از این زمان استفاده شود. |
{
"error": {
"code":"Error Code"
},
"meta": {
"timestamp": "Timestamp" // Timestamp
}
}
JSONدر صورت مشاهده Status Code 404 URL درخواست خود را به اشتباه وارد نموده اید.
ساخت توکن ارتباطی JWT #
JWT در واقع یک توکن امنیتی است که بر پایه فرمت JSON ساخته شده است. این توکن حاوی اطلاعات ضروری کاربر مانند شناسه کاربری، نقشها و سطح دسترسی اوست. جی دبلیو تی به سه بخش سربرگ (Header)، بار (Payload) و امضا (Signature) تقسیم میشود. سربرگ شامل الگوریتم امضا و نوع توکن است. بار، اطلاعات کاربر را به صورت JSON در خود جای داده و امضا تضمینکننده صحت و درستی اطلاعات است.
JWT چگونه کار میکند؟ #
فرآیند کار JWT به شرح زیر است:
درخواست ورود #
کاربر با وارد کردن نام کاربری و رمز عبور خود در مرحله قبل اقدام به دریافت توکن نموده است. و هسته مرکزی با توجه به اطلاعات اراسلی و دسترسی های مجاز کاربر اثدام به تولید توکن میکند.
تولید توکن JWT توسط درخواست کننده #
درخواست کننده باید در این مرحله با توجه به اطلاعات زیر توکن JWT خود را ایجاد نموده و بعنوان کلید دسترسی جهت ارتباط با هسته مرکزی در HEADER درخواست های خود آن را ارسال نماید.
اعتبارسنجی توکن JWT #

در درخواستهای بعدی، سرور توکن JWT را دریافت کرده و اعتبار آن را بررسی میکند. در صورتیکه توکن معتبر باشد، به کاربر اجازه دسترسی به منابع داده میشود.
در حال حاضر اعتبار توکن های JWT بمدت 7 روز می باشد. که البته این موضوع بسته به توکن تولید شده در مرحله اول هم دارد در صورتی که توکن تولید شده در مرحله اول اعتباری کمتر از 7 روز داشته باشد انقضأ توکن JWT به همان میزان در نظر گرفته خواهد شد.
ساختار JSON Web Token چگونه است؟ #
ساختار JWT به سه بخش تقسیم میشود که با . (dot) از هم جدا میشوند:
- Header
- Payload
- Signature
و ساختاری شبیه به xxxxx.yyyyy.zzzzz
Header چیست؟ #
Header از دو بخش تشکیل شده است که بخش اول الگوریتم آن را تعیین میکند و بخش دوم نوع آن را مشخص میکند، که طبیعتاََ JWT است.
این ساختار JSON با Base64Url رمز گذاری شده است تا به بخش اول آن شکل بدهد، منظور از بخش اول xxxxx.yyyyy.zzzzz است.
برای مثال:
عنوان | نوع | وضعیت | مقادیر | توضیحات |
alg | String | اجباری | HS256 | الگوریتم ارسال درخواست |
typ | String | اجباری | JWT | نوع درخواست |
{
"alg": "HS256",
"typ": "JWT"
}
JSONPayload چیست؟ #
بخش دوم xxxxx.yyyyy.zzzzz) Token) را Payload تشکیل میدهد و شامل یک سری اطلاعات دربارهی کاربر و یک سری دادههای اضافیاند، که استفاده از آنها خیلی رایج است. Payloadها میتوانند ساختاری شبیه به زیر داشته باشند.
عنوان | نوع | وضعیت | مقادیر | توضیحات |
iss | String | اجباری | دامنه ثبت شده در هسته مرکزی | |
aud | String | اجباری | api | مخاطب شما که در مواردی که شما فقط استفاده کننده از API هستید برابر api باید باشد |
iat | Timestamp | اجباری | زمان صدور توکن JWT | |
uuid | Integer | اجباری | سریال عددی درخواست کننده | |
uip | IP | اجباری | آدرس IP درخواست کننده |
{
"iss": "Your domain",
"aud": "Your level",
"iat": "Timestamp",
"uuid": "Your ID",
"uip": "Your IP"
}
JSONSignature چیست؟ #
آخرین و مهمترین بخش JWTها Signature است، در حقیقت Signature تایید میکند که آیا دادهای که از سمت کاربر برگشته است بهم ریخته و یا دستکاری شده است؟
الگوریتمی که ما برای رمزنگاری در Header دادهایم را میگیرد، header و Payload را ترکیب میکند و آنها را دوباره رمزنگاری میکند و بار دیگر با کلیدی که به Signature داده ایم رمزنگاری میکند و اگر کسی مقدار رمزگذاری شده را تغییر دهد خطایی دریافت میکنیم که به ما نشان میدهد Signature معتبر نمیباشد.
Signatureها نیز ساختاری شبیه به زیر دارند.
عنوان | نوع | وضعیت | مقادیر | توضیحات |
Header | base64UrlEncode | اجباری | JSON هدر اینکد شده | |
Payload | base64UrlEncode | اجباری | JSON اطلاعات ارسالی اینکد شده | |
Signature | String | اجباری | توکن دریافتی از اتوماسیون |
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),token)
PHPخروجی این عملیات بعنوان توکن JWT برای ارسال درخواست ها استفاده شود.
جهت سهولت در کار با توکن های JWT چند نمونه کد از زبان های مختلف برای شما آماده شده است
PHP (با استفاده از کتابخانه firebase/php-jwt
) #
<?php
require 'vendor/autoload.php';
use \Firebase\JWT\JWT;
$key = "your_secret_key";
$header = [
"alg" => "HS256",
"typ" => "JWT"
];
$payload = [
"iss" => "Your domain",
"aud" => "Your level",
"iat" => time(),
"uuid" => "Your ID",
"uip" => "Your IP"
];
$jwt = JWT::encode($payload, $key, 'HS256');
echo $jwt;
?>
PHPPython (با استفاده از کتابخانه PyJWT) #
import jwt
import time
key = "your_secret_key"
header = {
"alg": "HS256",
"typ": "JWT"
}
payload = {
"iss": "Your domain",
"aud": "Your level",
"iat": int(time.time()),
"uuid": "Your ID",
"uip": "Your IP"
}
token = jwt.encode(payload, key, algorithm='HS256', headers=header)
print(token)
PythonJavaScript (با استفاده از کتابخانه jsonwebtoken
) #
const jwt = require('jsonwebtoken');
const key = "your_secret_key";
const header = {
"alg": "HS256",
"typ": "JWT"
};
const payload = {
"iss": "Your domain",
"aud": "Your level",
"iat": Math.floor(Date.now() / 1000),
"uuid": "Your ID",
"uip": "Your IP"
};
const token = jwt.sign(payload, key, { algorithm: 'HS256', header: header });
console.log(token);
JavaScriptNode.js (با استفاده از کتابخانه jsonwebtoken
) #
const jwt = require('jsonwebtoken');
const key = "your_secret_key";
const header = {
"alg": "HS256",
"typ": "JWT"
};
const payload = {
"iss": "Your domain",
"aud": "Your level",
"iat": Math.floor(Date.now() / 1000),
"uuid": "Your ID",
"uip": "Your IP"
};
const token = jwt.sign(payload, key, { algorithm: 'HS256', header: header });
console.log(token);
JavaScriptJava (با استفاده از کتابخانه java-jwt
) #
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.util.Date;
public class Main {
public static void main(String[] args) {
String key = "your_secret_key";
Algorithm algorithm = Algorithm.HMAC256(key);
String token = JWT.create()
.withIssuer("Your domain")
.withAudience("Your level")
.withIssuedAt(new Date())
.withClaim("uuid", "Your ID")
.withClaim("uip", "Your IP")
.sign(algorithm);
System.out.println(token);
}
}
Java