Pull to refresh

Авторизация через Хабр

Reading time2 min
Views776
Я бы хотел, чтобы Хабр имел возможность авторизовывать пользователей на сторонних сервисах.

Зачем?


Во-первых, хабраюзеры получат дополнительный сервис авторизации, хуже им от этого не станет, наоборот — дополнительная свобода выбора.

Во-вторых, некоторые хабраюзеры проектируют сервисы, целевой аудиторией которых является Хабр, например, небезызвестный хостинг картинок habreffect.ru, всевозможные мониторы кармы и рейтинга и тд. Само собой, что для таких сервисов напрашивается хабраавторизация.

В-третьих, при такой авторизации разработчик может вносить ограничения, например, не пускать пользователей с кармой < -100, что, согласитесь, порой имеет смысл.

Как?


Схема, описанная ниже, весьма банальна и знакома всем, кто хоть раз интегрировал свой сайт с сервисами типа Логинзы.

1) Сторонний сайт посылает запрос на специальный API-урл Хабра, передавая логин хабраюзера-владельца сайта (открытый ключ), урл переадресации и сигнатуру, сформированную на базе пароля хабраюзера (закрытый ключ). Таким образом, отправить такой запрос может только тот, кому известны логин и пароль хабраюзера.

2) В ответ возвращается токен. Он имеет короткий срок жизни (5-10 минут), им можно воспользоваться 1 раз. На основе токена формируется ссылка для авторизации.

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

Хотели бы вы, чтобы была авторизация через Хабр?

UPD

Пример


Так как я зарегистрирован на Хабре, то у меня автоматом есть открытый ключ (логин) и закрытый ключ (пароль). Предположим, что они соответственно равны «igrishaev» и «pass123». Теперь я хочу сделать вход на свой сервис через Хабр. Порядок действий следующий:

1) Посылаю запрос на habrahabr.ru/api/auth/get_token, передаю параметры:
login=igrishaev,
url=http://mysite.ru/habra_auth
signature=md5(login + url + md5(«pass123»))

2) В ответ получаю токен, например, «334-dfas9fdas30sdf». Ссылка для авторизации на хабре будет habrahabr.ru/api/auth?token=334-dfas9fdas30sdf

3) Перейдя по этой ссылке, посетитель sumkin вводит свои логин и пароль. Обратите внимание, что он вводит их на странице Хабра, поэтому я их никаким образом получить не могу.

4) Хабр перенаправляет пользователя sumkin на мой сайт по ссылке mysite.ru/habra_auth, в строке запроса параметры:
login=sumkin
name=Фёдор
lastname=Сумкин
signature=md5(login + md5(«pass123»))

5) Я проверяю валидность сигнатуры (она подписана моим паролем), и если всё в порядке, аутенфициую пользователя как sumkin.
Всё.
Tags:
Hubs:
Total votes 55: ↑41 and ↓14+27
Comments13

Articles