რა არის OAuth-ის ავტორიზაცია და როგორ მუშაობს?
sobes.tech AI
პასუხი AI-სგან
OAuth — դա բաց ստանդարտ է թույլտվության համար: Այն թույլ է տալիս օգտվողին տրամադրել երրորդ կողմի հավելվածին սահմանափակ մուտք դեպի իր տվյալները, որոնք պահվում են այլ ծառայության (ресուրսային սերվեր), առանց անհրաժեշտության փոխանցելու իր մուտքագրող տվյալները (մուտք/գաղտնաբառ) այդ հավելվածին:
OAuth-ի աշխատանքը հիմնված է "մուտքագրման տոքենների" տրամադրման վրա փոխարենը մուտքագրող տվյալների: Տիպիկ գործընթացը հետևյալն է.
- Ավտորիզացիայի հարցում: Օգտվողը փորձում է կատարել գործողություն երրորդ կողմի հավելվածում, որը պահանջում է մուտք դեպի ռեսուրսային սերվերի տվյալները: Հավելվածը սկսում է ավտորիզացիայի հարցում ռեսուրսային սերվերի ավտորիզացիոն սերվերին:
- Ուղղում ավտորիզացիոն սերվերին: Օգտվողը ուղղվում է ավտորիզացիոն սերվերի էջ:
- Օգտվողի նույնականացում: Օգտվողը նույնականացվում է ավտորիզացիոն սերվերում (եթե դեռ չի):
- Օգտվողի համաձայնություն (Consent): Սերվերը խնդրում է օգտվողից թույլտվություն տրամադրել որոշակի մակարդակի մուտք դեպի իր տվյալները (scopes). Օգտվողը կամ համաձայն է, կամ մերժում է հարցումը:
- Ավտորիզացիոն կոդի տրամադրում: Եթե օգտվողը համաձայն է, սերվերը ավտորիզացիոն փոխանցում է օգտվողին ետ՝ երրորդ հավելված, և տրամադրում է "ավտորիզացիոն կոդ":
- Կոդի փոխանակում մուտքագրման տոքենի համար: Երրորդ հավելվածը, որը ստացել է ավտորիզացիոն կոդը, ուղիղ հարցում է կատարում ավտորիզացիոն սերվերին՝ փոխանակելու այդ կոդը "մուտքագրման տոքեն" (Access Token) և հնարավոր է՝ "թարմացման տոքեն" (Refresh Token): Այս հարցումը կատարվում է սերվերների միջև, առանց օգտվողի բրաուզերի միջամտության, ինչը բարձրացնում է անվտանգությունը:
- Տվյալների մուտք: Երրորդ հավելվածը օգտագործում է ստացված մուտքագրման տոքենը՝ կատարելու հարցումներ ռեսուրսային սերվերին օգտվողի անունից: Ամեն such հարցում մուտքագրման տոքենը ուղարկվում է գլխագրում:
- Տոքենի վավերականացում: Ռեսուրսային սերվերը վավերականացնում է մուտքագրման տոքենը և, եթե այն վավեր է և համապատասխանում է պահանջվող scope-ներին, տրամադրում է տվյալներին մուտք:
OAuth ունի մի քանի հոսքեր (flows), որոնք հարմար են տարբեր սցենարների համար, օրինակ՝
- Authorization Code Flow: Ամենաբարձր անվտանգ, օգտագործվում է սերվերային մասով վեբ հավելվածների համար:
- Implicit Flow: Հնացած, օգտագործվում էր առանց սերվերային մասի վեբ հավելվածների համար:
- Client Credentials Flow: Հավելվածների համար, որոնք ստանում են մուտք իրենց սեփական ռեսուրսներին, ոչ օգտվողական:
- Resource Owner Password Credentials Flow: Չի խորհուրդ տրվում, փոխանցելով օգտվողի մուտքագրող տվյալները հավելվածին:
(Օրինակ՝ Authorization Code Flow)
C#-ում OAuth-ի իրականացման համար հաճախ օգտագործվում են գրադարաններ, ինչպիսիք են ASP.NET Core Identity տարբեր պրովայդերների (Google, Facebook և այլն) հետ, կամ IdentityServer գրադարանները՝ սեփական ավտորիզացիոն սերվեր ստեղծելու համար: