Как это работает: вход на сайты через соцсети

Часто на сай­тах вам могут пред­ло­жить вой­ти с помо­щью Google, Facebook или ВКон­так­те. Если у вас есть акка­унт в одном из этих сер­ви­сов, вам не нуж­но будет реги­стри­ро­вать­ся с нуля: запол­нять имя, почту и ста­вить свою фото­гра­фию — всё это будет сде­ла­но авто­ма­ти­че­ски. Раз­бе­рём­ся, как это рабо­та­ет и насколь­ко это без­опас­но.

Это исто­рия о тех­но­ло­гии OAuth2.

Как это работает: вход на сайты через соцсети В Яндекс мож­но вой­ти через Гугл. Как тебе такое, юзер­нейм?

Для чего это нужно

Каж­дый сайт заин­те­ре­со­ван в новых посе­ти­те­лях, пото­му что им мож­но потом про­дать плат­ную под­пис­ку или пока­зать рекла­му. Поэто­му сай­там выгод­но, что­бы реги­стра­ция была как мож­но про­ще, в иде­а­ле — по нажа­тию одной кноп­ки (а то и вооб­ще без реги­стра­ции). Если поль­зо­ва­те­ли долж­ны реги­стри­ро­вать­ся вруч­ную и вво­дить все свои дан­ные, есть шанс, что они отва­лят­ся. 

Парал­лель­но с этим в интер­не­те есть сер­ви­сы, кото­ры­ми поль­зу­ют­ся все: Яндекс, Гугл, фейс­бук или Вкон­так­те. Поче­му бы не брать дан­ные о поль­зо­ва­те­ле с этих сер­ви­сов?

Для это­го и при­ду­ма­ли OAuth.

OAuth — это как договор между сайтами

Яндекс, Гугл или любой дру­гой сер­вис, кото­рый раз­ре­ша­ет поль­зо­вать­ся сво­им про­пус­ком, долж­ны при­нять еди­ный про­то­кол обме­на дан­ных. Если по-простому, то они долж­ны дого­во­рить­ся: 

«Мы даём друг дру­гу дан­ные вот в таком фор­ма­те, мы при­ни­ма­ем их в этом фор­ма­те, мы друг дру­гу дове­ря­ем».

Эти дого­во­рён­но­сти закре­пи­ли в еди­ном стан­дар­те авто­ри­за­ции — OAuth. В нём напи­са­но, как выда­вать про­пус­ка, как их про­ве­рять и что делать в раз­ных слу­ча­ях.

Как работает единая авторизация

Для поль­зо­ва­те­ля всё выгля­дит про­сто: нажал «Вой­ти через Яндекс», под­твер­дил Яндек­су своё жела­ние вой­ти на нуж­ный сайт, и всё — вы уже заре­ги­стри­ро­ва­лись на новом сай­те и може­те им поль­зо­вать­ся. Но что про­ис­хо­дит под капо­том?

Как работает единая авторизация

Когда посе­ти­тель, напри­мер, сай­та о про­грам­ми­ро­ва­нии, нажи­ма­ет «Вой­ти через Яндекс», этот сайт отправ­ля­ет в Яндекс запрос и гово­рит: «Тут кто-то хочет вой­ти на мой сайт через ваш сер­вис, може­те разо­брать­ся?»:

Когда посетитель, например, сайта о программировании, нажимает «Войти через Яндекс», этот сайт отправляет в Яндекс запрос

Когда Яндекс полу­ча­ет такой запрос, ему нуж­но понять, что за посе­ти­тель при­шёл на сайт и есть ли у него акка­унт Яндек­са. Для это­го он пока­зы­ва­ет всплы­ва­ю­щее окно, где посе­ти­тель может вой­ти в свой Яндекс-аккаунт. Это нуж­но, что­бы сер­вис пони­мал, на чьё имя выда­вать про­пуск для сай­та. Если поль­зо­ва­тель уже зало­ги­нен в Яндек­се, его сра­зу узна­ют. 

Когда Яндекс получает такой запрос, ему нужно понять, что за посетитель пришёл на сайт и есть ли у него аккаунт Яндекса

Как толь­ко посе­ти­тель вво­дит свой логин и пароль, Яндекс узна­ёт его и спра­ши­ва­ет, дове­ря­ет ли он это­му сай­ту о про­грам­ми­ро­ва­нии и может ли Яндекс поде­лить­ся с сай­том дан­ны­ми о его име­ни и почте:

Как только посетитель вводит свой логин и пароль, Яндекс узнаёт его

Даль­ше Яндекс отда­ёт ваши дан­ные сай­ту, он вас узна­ёт, и гото­во:

Дальше Яндекс отдаёт ваши данные сайту, он вас узнаёт, и готово

Насколько это безопасно

Каж­дый сайт, кото­рый исполь­зу­ет OAuth, сам опре­де­ля­ет, какие дан­ные о поль­зо­ва­те­ле они хотят уви­деть. Напри­мер, одно­му сай­ту доста­точ­но знать ваше имя и почту, а дру­го­му хочет­ся ска­чать вашу фото­гра­фию и узнать дату рож­де­ния. 

Когда вы буде­те вхо­дить через OAuth, сер­вис вам ска­жет: «Вот какие дан­ные у меня запра­ши­ва­ют. Давать доступ?». Когда вы раз­ре­ши­те доступ, эти дан­ные перей­дут на сайт. Отка­же­тесь — не перей­дут. 

✅ Сай­ты, кото­рые исполь­зу­ют OAuth, не смо­гут про­чи­тать вашу почту или лич­ные сооб­ще­ния. Но есть и дру­гие тех­но­ло­гии — напри­мер при­ло­же­ния в соци­аль­ных сетях, — и уже они могут делать гораз­до боль­ше. 

✅ Через OAuth нель­зя отпра­вить сооб­ще­ния от ваше­го име­ни или сде­лать пост в вашей лен­те ново­стей. Но, опять же, если это не OAuth, а отдель­ное при­ло­же­ние для фейс­бу­ка или VK, то воз­мож­но и такое. Помни­те все эти игры, кото­рые постят от име­ни игро­ков «Я собрал капу­сту на сво­ей фер­ме»? Вот это они.

✅ Через OAuth точ­но не пере­да­ёт­ся ваш пароль от Яндек­са, Гуг­ла и дру­гих сер­ви­сов. Сер­ви­сы хра­нят паро­ли в зашиф­ро­ван­ном виде, поэто­му даже при всём жела­нии не смог­ли бы его пере­дать. 

Можно ли этому доверять?

Ско­рее нет, чем да. С OAuth есть про­бле­ма: вы нико­гда не зна­е­те, дей­стви­тель­но ли это OAuth или это хаке­ры сде­ла­ли шту­ку, похо­жую на OAuth, кото­рая хочет украсть ваш пароль. На вся­кий слу­чай вот тех­ни­ка без­опас­но­сти: 

⚠️ Во всех важ­ных сер­ви­сах вклю­чай­те двух­фак­тор­ную авто­ри­за­цию: что­бы не толь­ко вво­дить пароль, но и полу­чать СМС.

⚠️ Если сер­вис под­дер­жи­ва­ет приложение-аутентификатор — исполь­зуй­те его. Напри­мер, в Яндек­се есть «Ключ», а в Гуг­ле — Authenticator. Это спе­ци­аль­ные при­ло­же­ния, кото­рые созда­ют допол­ни­тель­ный слой защи­ты поверх ваше­го логи­на и паро­ля. 

⚠️ Если вы толь­ко что поль­зо­ва­лись сер­ви­са­ми Яндек­са или Гуг­ла и тут вас про­сят вновь вве­сти логин и пароль — закрой­те эту стра­ни­цу. Яндекс и Гугл пом­нят вас и не попро­сят пароль лиш­ний раз. 

Текст и иллю­стра­ции:
Миша Поля­нин

Редак­тор:
Мак­сим Илья­хов

Кор­рек­тор:
Ира Михе­е­ва

Иллю­стра­тор:
Даня Бер­ков­ский

Вёрст­ка:
Маша Дро­но­ва

Достав­ка:
Олег Веш­кур­цев