Идеята е ти, като логнат потребител на един сървър, да дадеш право на друг сървър, да контакува със сървърът, в който си логнат, от твое име.
Например, ти си логнат в Google, но искаш да използваш този акаунт, за да се логнеш и в други сайтове, примерно Facebook…
Тогава въпросната технология (OAuth 2) повелява, че в конкретният случай Google трябва да има специален сървис (API), който да „гарантира“ пред Facebook, „да, този потребител е мой, логнат е“.
Как става това програмно? Google (където си логнат като потребител), дава определен код, чрез свой отделен сървис.
Workflow-ът e следният:
Tи си логнат например в Google;
Но искаш този акаунт да го използваш и за да се логваш например във Facebook;
Което значи, че Google трябва някак да удостовери пред Facebook, че ти си логнат потребител на Google, демек Google да каже на Facebook „да, този е мой потребител, няма проблем да се логне при вас с акаунтът, който има при мен“.
Което програмно се осъществява с помощта OAuth сървис (даден URL) на Google, който сървис ти връща даден уникален код.
Който код ти подаваш на Facebook.
Който код Facebook подават на Google, който те разпознава по него (кодът), който току що ти е издал.
Който Google съответно връща на Facebook даден токен, с който те вече могат да работят с Google.
Има трима играчи: Потребителят, това си ти, логнат в Сървърът (напр. Google), който от твое име ще работи със Сървисът (напр. Facebook).
Потребителят дава право на Сървъра да работи от негово име със Сървиса.
Демек, логнал си се в Google, но опълномощаваш Google да се представя пред Facebook все едно си ти.
Изходното положение е, че Потребителят е вече логнат в Сървъра (Google напр.). Но как да даде право на Сървисът (Facebook) да работи със Сървърът (Google) от негово име? Да си даде акаунта за да се логва Сървисът (Facebook) с него? Как ли пък не!
Единствено остава Потребителят първо да вземе от Сървъра (Google) специален код, да го даде на Сървиса (Facebook), който пък да го даде на Сървъра (Google) „Ето, бай Иван ми даде този код, който ти си му дал, с което ми разрешава да работя с теб от негово име“. Тогава Сървърът (Google) дава на Сървиса (Facebook) специален токен, с който вече Сървисът (Facebook) се ауторизира пред Сървъра (Google).
Трябва да му подадеш :
1) т.н. scope – за коя точно услуга на Сървъра (Gооgle) искаш да грантнеш Сървиса (Facebook)
2) response type – например „code“
3) callback url – къде обратно да бъде изпратен отговорът с кода
4) client id
Toзи код е временен и е нужен само докато се издаде токен, защото не е сигурно токен да се предава между Потребителя и Сървисът. Между Сървъра и Сървиса, може, но не и между Потребителя и Сървиса. Този код е просто една допълнителна секюрити стъпка за добиване на токен (например JWT токен).
Демек, ти като Потребител, който се е логнал на Сървиса (Google), трябва само да вземеш този код и да го дадеш на Сървъра (Facebook), който да се идентифицира пред Сървиса (Google) от името на теб – бай Иван, за да получи токен. От там нататък вече Сървъра (Facebook) си продължава със Сървиса (Google) с помощта на този токен, кодът беше до тук.
Литература: