Կարգավորեք մուտքի տոկենը / OAuth-ի վրա հիմնված նույնականացումը
OAuth (Բաց Ինքնավավերացում) բաց ստանդարտ է թոքենով նույնականացման և լիազորման համար, որը կարող է օգտագործվել Single Sign-On (SSO) ապահովելու նպատակով։ OAuth-ը թույլ է տալիս վերջնական օգտվողի հաշվի որոշակի տեղեկատվություն օգտագործել երրորդ կողմի ծառայությունների կողմից (օր.՝ Facebook և այլն)՝ առանց օգտվողի գաղտնաբառը բացահայտելու։ Այն գործում է որպես միջնորդ՝ օգտվողի անունից, ծառայությանը տրամադրելով մուտքի թոքեն, որը լիազորում է մասնակի տեղեկատվության փոխանցում։
Այս Drupal API նույնականացման մեթոդը օգտագործում է OAuth 2.0 պրոտոկոլ՝ անվտանգության մուտքի թոքեն ստանալու համար։ Այս թոքենը օգտագործվում է ձեր Drupal կայքի API-ներին մուտք գործելու համար։ OAuth մեթոդը տրամադրում է բարձր մակարդակի կոդավորված և ապահով թոքեն, ապահովելով ձեր Drupal API-ների պաշտպանված լինելը։ Այն համարվում է ամենաապահով եղանակներից մեկը՝ կանխելու ոչ թույլատրելի մուտքը ձեր Drupal REST կամ JSONAPI վերջնակետերին։ Այս մոդուլը համատեղելի է Drupal 7, Drupal 8, Drupal 9, Drupal 10 և Drupal 11 տարբերակների հետ։
Կարգավորման տեսանյութ․
OAuth 2.0-ում ներգրավված են հետևյալ երեք կողմերը․
- Օգտվողը ունի տվյալներ, որոնց մուտքը ստացվում է API-ով և ցանկանում է թույլատրել հավելվածին մուտք գործել դրանց։
- Հավելվածը ցանկանում է API-ով օգտվողի տվյալներին մուտք գործել օգտվողի անունից։
- API վերջնակետը վերահսկում և ապահովում է օգտվողի տվյալների հասանելիությունը։
API-ն մուտք կտրամադրի միայն այն դեպքում, երբ հավելվածից ստանա վավեր մուտքի թոքեն։ Թոքենը ստանալու եղանակը կախված է ընտրված OAuth սխեմայից։
Նախադրյալներ՝ ներբեռնում և տեղադրում․
- Ներբեռնեք և տեղադրեք Drupal REST & JSON API Authentication մոդուլը։
- REST UI․ Այս մոդուլը տրամադրում է REST մոդուլի կարգավորման ինտերֆեյս։
- Ձեր Drupal կայքում (Extend բաժին /admin/modules) միացրեք հետևյալ Web Services մոդուլները․
- JSON: API
- REST UI
- RESTful Web Services
- Serialization
OAuth/Access Token-ով API նույնականացման կարգավորման քայլեր․
- Լավ պատկերացման համար դիտարկենք օրինակ՝ ինչպես ավելացնել OAuth/Access Token-ով նույնականացում՝ օգտվողի տվյալները ստանալու API-ի համար։
- Նշում․ Drupal-ի get user information API-ն օգտագործվում է օգտվողի տվյալները ստանալու համար։
Միացրեք API-ն և նշանակեք մեթոդներ և գործողություններ․
- Առաջին քայլը API-ն միացնելն է և անհրաժեշտ մեթոդներն ու գործողությունները ընտրելը։ Սա կարելի է անել REST UI մոդուլով կամ ուղղակի փոփոխել config-ը։
- REST UI մոդուլով API-ն միացնելու համար սեղմեք Configure կոճակը REST UI մոդուլի դիմաց (տես նկարում)։
- Օրինակի համար միացրեք /user/{user} API-ն, որը գտնվում է Content բաժնում։ Սեղմեք Enable կոճակը։
- Քանի որ մեր նպատակը օգտվողի տվյալները ստանալն է, ընտրեք հետևյալ կարգավորումները․
- Մեթոդ՝ GET
- Ֆորմատ՝ json
- Նույնականացման մատակարար՝ rest_api_authentication.
- Սա թույլ կտա miniOrange REST API Authentication մոդուլին նույնականացնել ձեր API հարցումը։ Սեղմեք Save Configuration՝ շարունակելու համար։
OAuth/Access Token-ով API նույնականացման կարգավորում․
- Այս քայլում OAuth/Access Token-ը կարգավորում ենք որպես API Authentication մեթոդ։ Դրա համար անցեք REST API Authentication մոդուլի API Authentication ներդիր (/admin/config/people/rest_api_authentication/auth_settings) հասցեով։
- Նշեք Enable Authentication տուփը և սեղմեք Save Settings։
- Save Settings-ից ներքև ընտրեք OAuth/Access Token ռադիո կոճակը։
- Սեղմեք Generate a new Client ID & Secret կոճակը։
- Պահպանեք Client ID-ն և Secret-ը, դրանք պետք են գալու օգտվողի տվյալների API-ին նույնականացնելիս։
Տվեք Drupal-ի դերերին օգտվողի տվյալները դիտելու իրավունք․
- Անհրաժեշտության դեպքում կարող եք ոչ ադմինիստրատոր դեր ունեցող օգտվողներին թույլատրել օգտվողի տվյալների դիտում։ Դա կարող եք անել նրանց View User Information թույլտվություն տալով (/admin/people/permissions բաժին)։
Ահա և վերջ!!!
Այժմ կարող ենք փորձել օգտվողի տվյալները ստանալ API-հարցմամբ՝ օգտագործելով OAuth/Access Token նույնականացումը։
Օրինակներ․
- Նախ պետք է կատարենք API-հարցում՝ մուտքի թոքեն ստանալու համար։ Այնուհետև այդ թոքենը կօգտագործենք Drupal API-ն նույնականացնելու համար՝ օգտվողի տվյալներ ստանալու հարցման ժամանակ։
- miniOrange API Authentication մոդուլը աջակցում է երկու grant տիպ՝ որոնց միջոցով կարող եք մուտքի թոքեն ստանալ․
Password Grant․
- Password grant տարբերակում մուտքի թոքենը ստանում ենք՝ POST հարցում ուղարկելով օգտվողի անունը և գաղտնաբառը՝ REST API Authentication մոդուլից ստացված Client ID-ով։
Հարցում․ POST <drupal_base_url>/rest_api/access_token
Մարմին․
grant_type = password
username = <drupal_username>
password = <drupal_password>
client_id = <client_id>
CURL հարցման ձևաչափ․
curl --location --request POST '<your_drupal_base_url>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_id= <drupal_client_id>' \
--data-urlencode 'username=<drupal_username >\
--data-urlencode 'password=<drupal_password>'
- Կարող եք օգտվել նաև Postman-ի հարցման պատկերից․
Client Credentials grant․
- Client Credentials տարբերակում մուտքի թոքենը ստանում ենք՝ POST հարցում ուղարկելով Client ID-ն և Client Secret-ը, ինչպես նաև օգտվողի անունը։
Հարցում․ POST <drupal_base_url>/rest_api/access_token
Մարմին․
grant_type = client_credentials
client_id = <client_id>
client_secret = <client_secret>
Username = <drupal_username>
CURL հարցման ձևաչափ․
curl --location --request POST '<drupal_base_url>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=<Client_ID>' \
--data-urlencode 'username=<drupal_username>' \
--data-urlencode 'client_secret=<Client_secret>'
- Կարող եք օգտվել նաև Postman-ի հարցման պատկերից՝ մուտքի թոքեն ստանալու համար Client Credentials grant-ով։
- Հաջող պատասխանը վերադարձնում է Access Token, ինչպես նաև թոքենի վավերականության ժամկետն ու տեսակը (տես նկարում)։
Սխալի պատասխաններ․
Սխալ | Նկարագրություն |
INVALID_CREDENTIALS |
Այս սխալը կստանաք, եթե օգտվողի անունը կամ գաղտնաբառը սխալ է։ Օրինակ: |
INVALID_CLIENT_ID |
Այս սխալը կստանաք, եթե տրամադրած Client ID-ն սխալ է։ Օրինակ: |
INVALID_CLIENT_SECRET |
Այս սխալը կստանաք, եթե տրամադրած Client Secret-ը սխալ է։ Օրինակ: |
MISSING_USERNAME |
Այս սխալը կստանաք, եթե հարցման մեջ բացակայում է username պարամետրը։ Օրինակ: |
Հոդվածը վերցված է Drupal Documentation-ից։