JWT նույնականացում
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 & 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 մոդուլի դիմաց (տես նկարում)։
- Օրինակով՝ պետք է միացնել /node API-ն, որը գտնվում է բովանդակության բաժնում։ Ակտիվացրեք API-ն Enable կոճակով։
- Քանի որ մեր նպատակը Drupal-ում բազային էջ ստեղծելն է, ընտրեք հետևյալ կարգավորումները․
- Մեթոդ՝ POST
- Ֆորմատ՝ json
- Նույնականացման մատակարար՝ rest_api_authentication.
- rest_api_authentication ընտրելով՝ հնարավորություն եք տալիս miniOrange REST API Authentication մոդուլին նույնականացնել ձեր API հարցումը։ Սեղմեք Save Configuration՝ շարունակելու համար։
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-ում։
Տվեք 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/jsonCURL հարցման ձևաչափ․
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 ստանալու համար․
Հարցում․
-
Հաջող պատասխանը վերադարձնում է JWT և դրա ժամկետի ավարտի պահը (տես նկարում)։
-
Եթե պատասխանում սխալ եք ստանում, օգտվեք ներքևի աղյուսակից՝ սխալի նկարագրությամբ և լուծումներով։
Սխալ | Նկարագրություն |
INVALID_CREDENTIALS |
Այս սխալը կստանաք, եթե օգտվողի անունը կամ գաղտնաբառը սխալ է։ Օրինակ: |
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-ի հարցման պատկերից․
- Հաջող պատասխանը կարող է նման տեսք ունենալ․
- Կարող եք ստուգել ստեղծված էջը Drupal-ի բովանդակության բաժնում։
-
Սխալների պատասխաններ և հնարավոր լուծումներ․
Սխալ | Նկարագրություն |
MISSING_AUTHORIZATION_HEADER |
Այս սխալը կստանաք, եթե API հարցումում չեք ուղարկել Authorization Header կամ այն հեռացվել է սերվերի կողմից։ Օրինակ: |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE |
Այս սխալը կստանաք, եթե Authorization Header-ն ուղարկել եք, բայց թոքենի տիպը Bearer չէ։ Օրինակ: |
TOKEN_EXPIRED |
Այս սխալը կստանաք, եթե ուղարկված access token-ը ժամկետանց է։ Օրինակ: |
USER_INFORMATION_NOT_FOUND |
Այս սխալը կստանաք օգտվողի տվյալները ստանալու ժամանակ։ Օրինակ: |
INVALID_SIGNATURE |
Այս սխալը կստանաք, եթե թոքենի ստորագրությունը վավեր չէ։ Օրինակ: |
Հոդվածը վերցված է Drupal Documentation-ից։