logo

Լրացուցիչ Բլոկների Տեսակներ (EBT) - Դասավորության Կառուցողի նոր փորձառություն❗

Լրացուցիչ Բլոկների Տեսակներ (EBT) - ձևավորված, կարգավորելի բլոկների տեսակներ՝ սլայդշոուներ, ներդիրներ, քարտեր, բացվող ցանկեր և շատ ուրիշներ։ Ներառված կարգավորումներ՝ ֆոնի, DOM տուփի, JavaScript փլագինների համար։ Փորձեք դասավորությունների կառուցման ապագան արդեն այսօր։

EBT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EBT մոդուլները

❗Լրացուցիչ Պարբերությունների Տեսակներ (EPT) - Պարբերությունների նոր փորձառություն

Լրացուցիչ պարբերության տեսակներ (EPT) - անալոգիական պարբերության վրա հիմնված մոդուլների հավաքակազմ։

EPT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EPT մոդուլները

Scroll
18/05/2025, by Ivan

Drupal API Authentication մոդուլը գործում է այնպես, որ ձեր API հարցումներին կցում է JWT թոքեն՝ նույնականացման նպատակով։ Այս մոդուլը օգտագործում է JSON Web Token (JWT), որը բաց ստանդարտ է՝ օգտվողի ինքնությունը երկու կողմերի միջև ապահով ներկայացնելու համար։

Այս քայլում, ըստ էության, օգտագործվում են ձեր Drupal կայքի օգտվողի անունն ու գաղտնաբառը՝ նախ JWT թոքեն ստանալու համար։ Երբ օգտվողի անունն ու գաղտնաբառը վավերացվում են, Drupal REST API Authentication մոդուլը ստեղծում է ստորագրված JSON Web Token, ապա API-ն այդ թոքենը վերադարձնում է հաճախորդին։

Ստանալով JWT թոքենը՝ կարող եք օգտագործել այն՝ Drupal-ում գործողություններ կատարելու համար, մինչև JWT թոքենի վավերության ժամկետի ավարտը։ Drupal REST API Authentication մոդուլը թույլ կտա մուտք գործել միայն այն դեպքում, երբ հավելվածից ստանա վավեր JWT։

JWT-ն կարելի է ստորագրել և ստուգել երկու ալգորիթմներով՝ HSA և RSA։

Դիտենք, թե ինչպես կարելի է օգտագործել JWT թոքեն API նույնականացման համար Drupal-ում։

 Ներբեռնել 

Կարգավորման տեսանյութ․

Drupal REST API JWT Authentication Youtube Video

Նախադրյալներ՝ ներբեռնում և տեղադրում․

  • Ներբեռնեք և տեղադրեք Drupal REST & JSON API Authentication մոդուլը։
  • REST UI․ Այս մոդուլը տրամադրում է REST մոդուլի կարգավորման ինտերֆեյս։ 
  • Ձեր Drupal կայքում (Extend բաժին /admin/modules) միացրեք հետևյալ Web Services մոդուլները․
    • REST UI
    • RESTful Web Services
    • Serialization

    Մոդուլների ակտիվացում

JWT-հիմք ունեցող API նույնականացման կարգավորման քայլեր․

  • Լավ պատկերացման համար դիտարկենք օրինակ՝ ինչպես ավելացնել JWT-ով նույնականացում՝ Drupal-ում բազային էջ ստեղծելու համար՝ օգտագործելով /node API-ն։

Միացրեք API-ն և նշանակեք մեթոդներ և գործողություններ․

  • Առաջին քայլը API-ն միացնելն ու անհրաժեշտ մեթոդներն ու գործողությունները նշելն է տվյալ API-ի համար։ Սա կարելի է անել REST UI մոդուլի միջոցով կամ ուղղակի փոխել config-ը։
  • REST UI մոդուլով API-ն միացնելու համար սեղմեք Configure կոճակը REST UI մոդուլի դիմաց (տես նկարում)։

    Settings for REST UI

  • Օրինակով՝ պետք է միացնել /node API-ն, որը գտնվում է բովանդակության բաժնում։ Ակտիվացրեք API-ն Enable կոճակով։

    Resources

  • Քանի որ մեր նպատակը Drupal-ում բազային էջ ստեղծելն է, ընտրեք հետևյալ կարգավորումները․
    • Մեթոդ՝ POST
    • Ֆորմատ՝ json
    • Նույնականացման մատակարար՝ rest_api_authentication.
  • rest_api_authentication ընտրելով՝ հնարավորություն եք տալիս miniOrange REST API Authentication մոդուլին նույնականացնել ձեր API հարցումը։ Սեղմեք Save Configuration՝ շարունակելու համար։

    Resource settings

JWT-ով API նույնականացման կարգավորում․

  • Այս քայլում կկարգավորենք JWT-ը որպես API Authentication մեթոդ։ Դրա համար անցեք REST API Authentication մոդուլի API Authentication ներդիր (/admin/config/people/rest_api_authentication/auth_settings

    • Նշեք Enable Authentication տուփը և սեղմեք Save Settings։
    • Save Settings կոճակի տակ ընտրեք JWT ռադիո կոճակը։
  • Եթե ցանկանում եք օգտագործել արտաքին ստեղծված JWT թոքեն, կարող եք կարգավորել հետևյալ տարբերակները․

    • Username Attribute դաշտում մուտքագրեք այն հատկության անունը, որտեղ ձեր օգտվողի անունը կստացվի։
    • Եթե ցանկանում եք արտաքին JWT թոքեն, կարող եք տրամադրել նաև JWKS URI՝ այդ JWT թոքենը ստուգելու համար Drupal-ում։

      JWT authentication

Տվեք Drupal-ի դերերին էջ ստեղծելու իրավունք․

  • Անհրաժեշտության դեպքում կարող եք թույլատրել ոչ ադմինիստրատոր դեր ունեցող օգտվողներին բազային էջ ստեղծել։ Դա կարող եք անել նրանց Basic page: Create new content թույլտվություն տալով (/admin/people/permissions բաժին)։

    Թույլտվությունների ավելացում

Ահա և վերջ!!!

Այժմ փորձենք ստեղծել բազային էջ API-հարցման միջոցով՝ օգտագործելով JWT նույնականացումը։

Օրինակներ․

  • Նախ՝ պետք է կատարենք API-հարցում՝ JWT ստանալու համար։ Այդ թոքենը կօգտագործենք՝ Drupal API-ն նույնականացնելու համար բազային էջ ստեղծելիս։

  • JWT ստանալու համար POST հարցում ուղարկեք օգտվողի անունով և գաղտնաբառով (base64-կոդավորված): Տեսք հարցման ձևաչափը․

    Հարցում․ POST <your_drupal_base_url>/rest_api/id_token

    Վերնագիր․ Authorization: Basic base64encoded <username:password;>
                 Accept: application/json

    CURL հարցման ձևաչափ․

    curl --location --request POST ' <your_drupal_base_url>/rest_api/id_token' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Basic base64encoded <username:password>'

  • Կարող եք օգտվել նաև Postman-ի հարցման պատկերից՝ JWT ստանալու համար․

Հարցում․

Postman հարցում

  • Հաջող պատասխանը վերադարձնում է JWT և դրա ժամկետի ավարտի պահը (տես նկարում)։

    Postman JWT թոքեն

  • Եթե պատասխանում սխալ եք ստանում, օգտվեք ներքևի աղյուսակից՝ սխալի նկարագրությամբ և լուծումներով։

Սխալ Նկարագրություն

INVALID_CREDENTIALS

Այս սխալը կստանաք, եթե օգտվողի անունը կամ գաղտնաբառը սխալ է։

Օրինակ:
{
  "status": "error",
  "error": "INVALID_CREDENTIALS",
  "error_description": "Invalid username or password."
}

Drupal REST API-ների նույնականացում՝ ստացված JWT-ով․

  • JWT-ով նույնականացում իրականացնելու համար պարզապես ավելացրեք ստացված JWT-ն որպես Bearer թոքեն Authorization Header-ում։

    Հարցում․ POST <drupal_base_url> /node?_format=json
    Վերնագիր․ Authorization: Bearer received_JWT
                 Accept: application/json   
    Մարմին․        
     {
      "type":[
          {"target_id":"page"}
          ],
      "title":[
          {"value":"Drupal Rest API Authentication"}
          ],
      "body":[
          {"value":"Page created using the JWT Authentication."}
          ]
    }

    CURL հարցման ձևաչափ․

    curl --location --request POST   ‘<drupal_base_url>/node?_format=json’\
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer <received_JWT>’ \
    --data-raw '

    {
      "type":[
          {"target_id":"page"}
          ],
      "title":[
          {"value":"Drupal Rest API Authentication"}
          ],
      "body":[
          {"value":"Page created using the JWT Authentication."}
          ]
    }'
     

Օրինակ հարցում՝ էջ ստեղծելու համար JWT-ով նույնականացումով․

  • Կարող եք օգտվել նաև Postman-ի հարցման պատկերից․

    Postman headers

  • Հաջող պատասխանը կարող է նման տեսք ունենալ․

    Postman response

  • Կարող եք ստուգել ստեղծված էջը Drupal-ի բովանդակության բաժնում։

    Drupal էջ

  • Սխալների պատասխաններ և հնարավոր լուծումներ․

Սխալ Նկարագրություն
MISSING_AUTHORIZATION_HEADER

Այս սխալը կստանաք, եթե API հարցումում չեք ուղարկել Authorization Header կամ այն հեռացվել է սերվերի կողմից։

Օրինակ:
{
    "status": "error",
    "error":"MISSING_AUTHORIZATION_HEADE",
  "error_description": "Authorization header not received."
}

INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE

Այս սխալը կստանաք, եթե Authorization Header-ն ուղարկել եք, բայց թոքենի տիպը Bearer չէ։

Օրինակ:
{
    "status": "error",
    "error": "INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE",
    "error_description": "Authorization header must be the type of Bearer Token."
}

TOKEN_EXPIRED

Այս սխալը կստանաք, եթե ուղարկված access token-ը ժամկետանց է։

Օրինակ:
{
    "status": "error"
    “error”: “TOKEN_EXPIRED”
    "message": "Invalid request: Token Expired."   
}

USER_INFORMATION_NOT_FOUND

Այս սխալը կստանաք օգտվողի տվյալները ստանալու ժամանակ։

Օրինակ:
{
    "status": "error"
    “error”: “USER_INFORMATION_NOT_FOUND”
    "message": "Could Not Retrieve User Information.",  
}

INVALID_SIGNATURE

Այս սխալը կստանաք, եթե թոքենի ստորագրությունը վավեր չէ։

Օրինակ:
{
    "status": "error"
    “error”: “INVALID_SIGNATURE”
    "message": "Invalid Token signature.",   
}

Հոդվածը վերցված է Drupal Documentation-ից։