View Categories

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

مدت زمان تخمینی مطالعه : 20

روش احرازهویت جهت ارتباط پایدار و امن #

ارتباط احراز هویت درخواست کننده ها در سامانه ایرپلاس در دو مرحله انجام میشود

مرحله اول دریافت توکن اختصاصی و مدت دار که جهت رمزنگاری بسته ها و بازگشایی توسط هسته مرکزی استفاده میشود که در بخش “دریافت توکن ارتباطی (دستی و خودکار)” انجام میگردد.

مرحله دوم شامل تولید توکن 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}}
JSON

API Url از طریق پنل کاربری قابل مشاهده خواهد بود

مقادیر ارسالی – Request Data #

عنواننوعوضعیتمقادیرتوضیحات
usernameStringاجبارینام کاربری دریافت شدهنام کاربری
passwordStringاجباریکلمه عبورهش شده با پروتکل SHA256
periodIntegerاختیاری1, 7, 15, 30, 90دوره انقضأ توکن بر اساس روز

{
    "username": "", //Username
    "password": "", //Password - Encrypted with SHA 256 protocol
    "period": 15 // 1, 7, 15, 30, 90
}
JSON

پاسخ صحیح – Response True #

عنواننوعمقادیرتوضیحات
payloadObject
payload.tokenStringتوکن دریافت شدهیک توکن 64 کاراکتری می باشد
payload.expirationStringزمان انقضأ توکناین زمان بر اساس الگو ISO8601
YYYY-MM-DDTHH:mm:ss.SSSZ
metaObject
meta.timestampTimestamp  زمان تولید پاسخ  این زمان بر اساس timestamp می باشد – در صورت نیاز از این زمان استفاده شود.
دریافت این پاسخ با Status Code 200 دریافت خواهد شد.
{
    "payload": {
        "token": "64 character token received",
        "expiration": "Expiration date and time - Gregorian calendar ISO8601"
    },
    "meta": {
        "timestamp": "Timestamp" // Timestamp
    }
}
JSON

پاسخ نادرست – Response False #

عنواننوعمقادیرتوضیحات
errorObject
error.codeIntegerشماره خطا مربوطهجهت استعلام خطا میتوانید از طریق این لینک اقدام کنید.
metaObject
meta.timestampTimestamp  زمان تولید پاسخ  این زمان بر اساس 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 است.

برای مثال:  

عنواننوعوضعیتمقادیرتوضیحات
algStringاجباریHS256الگوریتم ارسال درخواست
typStringاجباریJWTنوع درخواست

{
    "alg": "HS256",
    "typ": "JWT"
}
JSON
Payload چیست؟ #

بخش دوم xxxxx.yyyyy.zzzzz) Token) را Payload تشکیل می‌دهد و شامل یک سری اطلاعات درباره‌ی کاربر و یک سری داده‌های اضافی‌اند، که استفاده از آن‌ها خیلی رایج است. Payloadها می‌توانند ساختاری شبیه به زیر داشته باشند.

عنواننوعوضعیتمقادیرتوضیحات
issStringاجباریدامنه ثبت شده در هسته مرکزی
audStringاجباریapiمخاطب شما که در مواردی که شما فقط استفاده کننده از API هستید برابر api باید باشد
iatTimestampاجباریزمان صدور توکن JWT
uuidIntegerاجباریسریال عددی درخواست کننده
uipIPاجباریآدرس IP درخواست کننده
{
    "iss": "Your domain",
    "aud": "Your level",
    "iat": "Timestamp",
    "uuid": "Your ID",
    "uip": "Your IP"
}
JSON
Signature چیست؟ #

آخرین و مهم‌ترین بخش JWTها Signature است، در حقیقت Signature تایید می‌کند که آیا داده‌ای که از سمت کاربر برگشته است بهم ریخته و یا دستکاری شده است؟

الگوریتمی که ما برای رمزنگاری در Header داده‌ایم را می‌گیرد، header و Payload را ترکیب می‌کند و آن‌ها را دوباره رمزنگاری می‌کند و بار دیگر با کلیدی که به Signature داده ایم رمزنگاری می‌کند و اگر کسی مقدار رمزگذاری شده را تغییر دهد خطایی دریافت می‌کنیم که به ما نشان می‌دهد Signature معتبر نمی‌باشد.

Signatureها نیز ساختاری شبیه به زیر دارند.  

عنواننوعوضعیتمقادیرتوضیحات
Headerbase64UrlEncodeاجباریJSON هدر اینکد شده
Payloadbase64UrlEncodeاجباریJSON اطلاعات ارسالی اینکد شده
SignatureStringاجباریتوکن دریافتی از اتوماسیون
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;
?>
PHP

Python (با استفاده از کتابخانه 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)
Python

JavaScript (با استفاده از کتابخانه 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);
JavaScript

Node.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);
JavaScript

Java (با استفاده از کتابخانه 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
به‌روزرسانی در بهمن 2, 1403
Shopping Basket
خانه
وبلاگ
جست‌وجو
درخواست