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

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

    Зачем?


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

    Во-вторых, некоторые хабраюзеры проектируют сервисы, целевой аудиторией которых является Хабр, например, небезызвестный хостинг картинок 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.
    Всё.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 13

      +4
      Безусловно будет здорово.

      Единственное что «не очень» в вашем предложении, это что «Посетитель переходит по ссылке на специальную страницу Хабра». Вот избежать бы этого момента заранее, чтобы посетителю не приходилось прыгать по сайтам, а авторизовываться со страницы моего ресурса.
        0
        Конечно, можно оформить javascript-виджет, который не будет перекидывать пользователя. Или открывать форму авторизации во всплывающем окне.
        0
        … передавая логин хабраюзера-владельца сайта (открытый ключ), урл переадресации и сигнатуру, сформированную на базе пароля хабраюзера (закрытый ключ)..

        Правильно ли я понимаю, что для этого стороннему сервису нужно знать логин и пароль хабраюзера?
        Я бы не стал вводить хабрапароль на сайте, если он только не принадлежит «тематическим медиа».
        Может ограничиться классикой в виде OAuth?
          +1
          > Посетитель переходит по ссылке на специальную страницу Хабра, где вводит свой логин и пароль.
          Читайте внимательнее. Хабровские логин-пароль вводятся только на самом хабре.
            0
            Тогда как сторонний сайт сгенерирует «сигнатуру, сформированную на базе пароля хабраюзера»?
              0
              Понял: имеется в виду тот хабраюзер, который является разработчиком стороннего сайта.

              Тонко.
            0
            Обновил топик с примером. Ваш пароль вне опасности.
            +13
            Поздравляю, вы придумали OAuth!
              +4
              Тут суть не в технологии, а в целевой аудитории
                0
                Смысл-то вроде один и тот же)
              +2
              Когда-то давно Хабр обещал внедрить OpenID, и насколько я понимаю, работы по его внедрению даже начались, но на каком-то этапе остановились.

              Не знаю, какие принципиальные причины мешают им стать OpenID-провайдером для авторизации как %username%.habrahabr.ru.
                0
                У есть меня предложение из другой области, но заводить лишний топик не хочу, а support@habrahabr.ru молчит. Да поправьте уже сортировку в личной почте! Новое письмо сразу после отправки оказывается предпоследним (при том, что сортировка от новых к старым). Спасибо за внимание, извините за оффтоп.
                  0
                  «Зачем» уже хватило бы.

                  Only users with full accounts can post comments. Log in, please.