Ի՞նչ է OAuth-ը։ «Sign in with Google»-ը և պատվիրակված հասանելիությունը
OAuth-ը բաց ստանդարտ է, որը թույլ է տալիս օգտատիրոջը սահմանափակ մուտք տալ մի հավելվածի իր հաշվին մեկ այլ ծառայության վրա՝ առանց իր գաղտնաբառը փոխանցելու։ Երբ սեղմում եք «Connect Google Calendar» և տեսնում եք էկրան, որը հարցնում է՝ «Թույլ տա՞լ այս հավելվածին տեսնել ձեր իրադարձությունները», դա OAuth է։ Հավելվածը ստանում է token, որը ճշգրիտ համապատասխանում է այն բանին, ինչ հաստատել եք, և որը կարող եք ցանկացած պահի չեղարկել։ Նույն մեխանիզմը, լրացուցիչ OpenID Connect շերտով, ապահովում է «Sign in with Google» և նմանատիպ կոճակները։
Ինչու է OAuth-ը կարևոր AI-ով կառուցելիս
OAuth-ը երկու տարածված իրավիճակում է հայտնվում, երբ հավելված եք կառուցում․
- Սոցիալական մուտք։ Ուզում եք, որ ձեր օգտատերերը մուտք գործեն «Sign in with Google» (կամ Apple, Microsoft, GitHub) կոճակով՝ առանց մեկ ուրիշ գաղտնաբառ ստեղծելու։ Տես ինչպես ավելացնել մուտք ձեր հավելվածին։
- Միանալ օգտատերերի հաշիվներին այլ ծառայություններում։ Ձեր հավելվածին պետք է կարդալ օգտատիրոջ օրացույցը, գրառումներ անել նրա սոցիալական հաշվում, վերցնել ֆայլեր նրա cloud drive-ից կամ համաժամեցնել հաշվապահական տվյալները։
Ամեն դեպքում ձեր AI կառուցողը կարող է գրել կոդը, բայց որոշ քայլեր միայն դուք կարող եք անել․ ստեղծել մշակողական հավելված մատակարարի հետ, ստանալ client ID և client secret, գրանցել callback URL-ներ և, որոշ թույլտվությունների համար, անցնել մատակարարի վերանայումը։ OAuth-ի իմացությունը այդ քայլերը և դրանց տված սխալները շատ պակաս առեղծվածային է դարձնում։ Մուտքի ավելի լայն պատկերի համար տես ինչ է authentication-ը։
Ամենօրյա անալոգիա
Մտածեք հյուրանոցի բանալու քարտի մասին։ Ժամանակ ընդունվելիս ռեսեպշնը ստուգում է, թե ով եք, ապա տալիս է քարտ, որ բացում է ձեր սենյակը և մարզասրահը՝ ոչ այլ սենյակներ, ոչ աշխատակիցների տարածքներ, և դադարում է աշխատել ելքի ժամանակ։ Քարտը ձեր անձնագիրը չի պարունակում։ Եթե այն կորչի, ռեսեպշնը չեղարկում է այն և տալիս նորը։
- Ռեսեպշնը թույլտվության սերվերն է (Google-ի մուտքի էջը)։
- Ձեր ինքնության ստուգումը Google-ում ձեր մուտքն է։
- Բանալու քարտը access token-ն է։
- «Սենյակը և մարզասրահը միայն» ձեր հաստատած scope-երն են։
- Ելքը token-ի ժամկետի ավարտն է, կամ դուք հասանելիությունը չեղարկում եք։
Հավելվածը, որ օգտագործում եք, երբեք չի տեսնում ձեր Google գաղտնաբառը, միայն բանալու քարտը։
Ինչպես է աշխատում OAuth-ը, քայլ առ քայլ
Վեբ հավելվածների համար ամենատարածված հոսքը authorization code flow-ն է։ Ահա, թե ինչ է լինում, երբ օգտատերը միացնում է իր Google Calendar-ը ժամանակացույցի հավելվածին․
- Սեղմում։ Օգտատերը սեղմում է «Connect Google Calendar»։
- Վերահղում մատակարարին։ Հավելվածը բրաուզերն ուղարկում է Google, իր client ID-ով, պահանջվող scope-երով (կարդալ օրացույցի իրադարձությունները) և redirect URI-ով, որտեղ Google-ը պետք է վերադարձնի օգտատիրոջը։
- Մուտք և համաձայնություն։ Օգտատերը մուտք է գործում Google-ում (եթե արդեն չի արել) և տեսնում է համաձայնության էկրան՝ թվարկելով, թե ինչ է հարցնում հավելվածը։ Սեղմում է Allow։
- Վերադարձ կոդով։ Google-ը բրաուզերը վերահղում է հավելվածի redirect URI՝ կարճաժամկետ, մեկանգամյա authorization code-ով։
- Փոխանակում սերվերում։ Հավելվածի սերվերը այդ կոդը, գումարած իր client secret-ը, ուղղակիորեն ուղարկում է Google-ին և ստանում access token (և հաճախ refresh token)։
- API-ի օգտագործում։ Սերվերը կանչում է Google Calendar API-ն access token-ով և ստանում օգտատիրոջ իրադարձությունները։
Քայլ 4-ի callback-ը նման է սրան՝
https://yourapp.com/auth/google/callback?code=4/0Adeu5B...&state=x7Kq9
Եվ քայլ 5-ի token պատասխանը JSON է այսպես՝
{
"access_token": "ya29.a0Af...",
"expires_in": 3599,
"refresh_token": "1//0gL...",
"scope": "https://www.googleapis.com/auth/calendar.readonly",
"token_type": "Bearer"
}
Կարևոր նախագծային կետը․ token-ի փոխանակումը տեղի է ունենում սերվեր-սերվեր, ուստի client secret-ը և token-ները երբեք պետք չէ անցնեն բրաուզերով։
OAuth vs OpenID Connect vs ձեր սեփական մուտքը
| Ինչին է պատասխանում | Օրինակ | |
|---|---|---|
| OAuth 2.0 | «Ինչ կարող է անել այս հավելվածը օգտատիրոջ անունից» (թույլտվություն) | Կարդալ օգտատիրոջ օրացույցը |
| OpenID Connect (OIDC) | «Ո՞վ է այս օգտատերը» (նույնականացում), OAuth-ի վրա կառուցված | «Sign in with Google»-ը, որ վերադարձնում է ստուգված էլ. փոստ |
| Ձեր սեփական մուտքը | «Արդյո՞ք սա ճիշտ գաղտնաբառն է այս հաշվի համար» | Էլ. փոստ և գաղտնաբառ (հեշավորված) ձեր տվյալների բազայում |
Շատ հավելվածներ համատեղում են դրանք․ էլ. փոստ-գաղտնաբառ մուտք, գումարած «Sign in with Google» OIDC-ով, գումարած առանձին OAuth միացումներ այլ ծառայությունների հետ։
Հիմնական տերմիններ
| Տերմին | Նշանակություն |
|---|---|
| Մատակարար / թույլտվության սերվեր | Ծառայությունը, որ օգտատերը մուտք է գործում և հասանելիություն տալիս՝ Google, Microsoft, GitHub։ |
| Client | Ձեր հավելվածը, ինչպես գրանցված է մատակարարի մոտ։ |
| Client ID | Ձեր հավելվածի հանրային նույնացուցիչը մատակարարի մոտ։ |
| Client secret | Ձեր հավելվածի գաղտնի գաղտնաբառը մատակարարի հետ։ Միայն սերվերում։ |
| Scope | Կոնկրետ թույլտվություն, օրինակ՝ «կարդալ օրացույցը» կամ «տեսնել էլ. փոստի հասցեն»։ |
| Համաձայնության էկրան (consent screen) | Էջ, որտեղ օգտատերը տեսնում և հաստատում է պահանջվող scope-երը։ |
| Redirect URI / callback URL | Այն, որտեղ մատակարարը վերադարձնում է օգտատիրոջը։ Պետք է նախապես գրանցվի և ճշգրիտ համընկնի։ |
| Access token | Կարճաժամկետ հավատարմագիր API-ն կանչելու համար։ |
| Refresh token | Ավելի երկարաժամկետ հավատարմագիր նոր access token-ներ ստանալու համար։ Պահեք այն գաղտնաբառի պես։ |
| ID token | OIDC-ում՝ ստորագրված token, որ նկարագրում է, թե ով է օգտատերը։ |
| PKCE | Լրացուցիչ ստուգում («proof key»), որ կանխում է գողացված կոդերի օգտագործումը։ Խորհուրդ է տրվում բոլոր client-ների համար։ |
| state | Պատահական արժեք, որ պաշտպանում է հոսքը կեղծ հարցումներից։ |
Սովորական թյուրըմբռնումներ
- «OAuth-ը մուտքի համակարգ է»։ Պարզ OAuth-ը տալիս է հասանելիություն, իսկ նույնականացումը OpenID Connect-ն է անում։ Մերկ access token-ը որպես ապացույց, թե ով է մարդը, իրական անվտանգության սխալների պատճառ է եղել։
- «Հավելվածը ստանում է իմ գաղտնաբառը»։ Երբեք։ Դա է հենց կետը։
- «Ավելի շատ scope-եր խնդրելը անվնաս է»։ Օգտատերերը ավելի զգույշ են լայն հարցումների նկատմամբ, և մատակարարները, ինչպես Google-ը, կարող են պահանջել հավելվածի վերանայում զգայուն կամ սահմանափակ scope-երի համար։ Խնդրեք միայն այն, ինչ պետք է։
- «Client secret-ը կարող է լինել frontend-ում»։ Ամեն ինչ, որ բրաուզերի կոդում է, հանրային է։ Պահեք այն սերվերային գաղտնիքներում։
- «Աշխատում է թեստավորման մեջ, ուրեմն կաշխատի արտադրության մեջ»։ Մատակարարները հաճախ սահմանափակում են չհաստատված հավելվածները, օրինակ՝ ցուցակված թեստային օգտատերերով, և ձեր կենդանի դոմենի redirect URI-ը պետք է առանձին գրանցվի։
- «Token-ները երբեք չեն ավարտվում»։ Access token-ները արագ են ժամկետանց լինում, և օգտատերերը կարող են թույլտվությունը չեղարկել։ Ձեր հավելվածը պետք է կարողանա երկուսն էլ դիմանալ։
Ինչ հարցնել ձեր AI կառուցողից
- «Ավելացրու «Sign in with Google»՝ OpenID Connect-ով և լավ պահպանվող մուտքի գրադարանով․ OAuth հոսքը ձեռքով մի գրիր։»
- «Օգտագործիր authorization code flow PKCE-ով և ստուգիր
stateպարամետրը։» - «Կարդա client ID-ն և client secret-ը սերվերում՝ միջավայրի փոփոխականներից։»
- «Խնդրիր միայն մեզ անհրաժեշտ scope-երը՝ միայն կարդալու օրացույցի հասանելիություն։»
- «Ասա ինձ բոլոր redirect URL-ները, որ պետք է գրանցեմ մատակարարի կոնսոլում՝ նախադիտման, հրապարակված URL-ի և անհատական դոմենի համար։»
- «Պահիր refresh token-ները կոդավորված տվյալների բազայում և վարվիր ժամկետանց կամ չեղարկված token-ների հետ՝ օգտատիրոջից խնդրելով նորից միանալ։»
- «Թույլ տուր օգտատերերին անջատել ինտեգրումը իրենց կարգավորումների էջից։»
OAuth-ը և Mythex-ը
Mythex-ը չունի ներկառուցված վերջնական օգտատիրոջ մուտք կառուցած հավելվածների համար․ իր փաստաթղթերը նկարագրում են «բեր քո սեփականը» (bring-your-own) մոտեցում․ ընտրում եք նույնականացման գրադարան կամ հոսթված մատակարար, պահում եք դրա բանալիները որպես նախագծի գաղտնիքներ, իսկ agent-ը գրում է կոդը։ Authentication ավելացնելու բաղադրատոմսը ունի սկզբնական հուշում դրա համար։ OAuth-ի հետ նաև հանդիպում եք Mythex-ում հենց ինքնին․ կարող եք մուտք գործել Google-ով, GitHub-ը միացնելը repo համաժամեցման համար օգտագործում է GitHub OAuth, իսկ AI օգնականները, որոնք միանում են Mythex-ին MCP-ով, անցնում են OAuth համաձայնության էջով։ Ավելին՝ տես ինչ է authentication-ը և ինչ է երկուական նույնականացումը։
Հարցեր
Ի՞նչ է OAuth-ը պարզ բառերով։
OAuth-ը ստանդարտ եղանակ է, որով օգտատերը թույլ է տալիս մի հավելվածին մուտք ունենալ իր հաշվին մեկ այլ ծառայության վրա՝ առանց իր գաղտնաբառը տալու։ Օրինակ՝ ժամանակացույցի հավելվածը կարդա նրա Google Calendar-ը։ Օգտատերը հաստատում է կոնկրետ թույլտվությունները, և հավելվածը ստանում է token, որ օգտագործում է միայն դրանց համար։
Արդյո՞ք OAuth-ը նույնն է, ինչ «Sign in with Google»-ը։
«Sign in with Google»-ը կառուցված է OAuth 2.0-ի և OpenID Connect-ի վրա։ OpenID Connect-ը OAuth-ի վրա ավելացված շերտ է, որ տալիս է ստանդարտ եղանակ՝ հավելվածին ասելու, թե ով է օգտատերը։ Ինքնին OAuth-ը վերաբերում է հասանելիության տրամադրմանը, իսկ OpenID Connect-ն է այն դարձնում մուտք։
Ի՞նչ է OAuth access token-ը։
Access token-ը այն հավատարմագիրն է, որը հավելվածն ուղարկում է ծառայության API-ին՝ ապացուցելու, որ հասանելիություն է ստացել։ Սովորաբար կարճաժամկետ է և սահմանափակված է օգտատիրոջ հաստատած թույլտվություններով (scope-երով)։ Refresh token-ը, եթե տրվել է, թույլ է տալիս հավելվածին ստանալ նոր access token-ներ՝ առանց օգտատիրոջից նորից հարցնելու։
Ի՞նչ է նշանակում redirect_uri_mismatch-ը։
Այն նշանակում է, որ մուտքի ժամանակ հավելվածի ուղարկած callback URL-ը ճշգրիտ չի համընկնում մատակարարի developer կոնսոլում գրանցվածի հետ։ Ավելացրեք ճշգրիտ URL-ը՝ ներառյալ https-ը, դոմենը, ուղին և վերջնական սլաշը՝ յուրաքանչյուր հասցեի համար, որտեղ աշխատում է ձեր հավելվածը։
Արդյո՞ք OAuth-ը անվտանգ է։
OAuth 2.0-ն լայնորեն օգտագործվում է և անվտանգ է, երբ ճիշտ է իրականացված․ օգտագործում է authorization code flow-ն PKCE-ով, ճշգրիտ redirect URL-ներ, state պարամետրը և պահում է client secret-ը և token-ները սերվերի վրա։ Խնդիրների մեծ մասը գալիս է իրականացման դյուրինացումներից, ուստի խորհուրդ է տրվում օգտագործել լավ պահպանվող գրադարան։