Когда-то на каждом сайте, где была функциональность «за логином» (то есть, доступная только после регистрации аккаунта), приходилось регистрироваться отдельно, вбивать почту, придумывать пароль.
Затем появился OAuth 2 (я нарочно опускаю всю историю с OpenID), и некоторые крупные сайты стали предоставлять возможность «войти через Икс»: такое есть у Твиттера, Фейсбука, ВКонтакте, Гитхаба.
Тонкий момент заключается в том, что в этом случае доступ к сервису, в котором я зарегистрировался через кнопку «Sign-in with Github», зависит от моего аккаунта на Гитхабе — если мой аккаунт заблокируют, потому что окажется, что я из неугодной страны, то я потеряю доступ ко всем прочим сайтам. Но если получится вставить между сайтом и Гитхабом ещё один слой, который контролирую я, то получится обойти эту ситуацию.
На этом построены web-sign-in и IndieAuth.
Выглядит это так: на своём сайте я добавляю ссылки на свои аккаунты
на Гитхабе, Твиттере, Фейсбуке, и добавляю им атрибут rel="me"
.
Если аккаунты по ссылке ссылаются обратно на мой сайт, то можно с большой долей уверенностью считать, что так получилось не случайно, и я контролирую и сайт, и аккаунт. После этого я могу логиниться на сайты, поддерживающие IndieAuth, используя свой домен. На примере абстрактного сайта example.org это выглядит так:
- я вбиваю
https://marinintim.com
в качестве своего логина - example.org редиректит меня на IndieLogin (сервис, упрощающий интеграцию)
- IndieLogin смотрит, какие ссылки есть на моём сайте с атрибутом
rel="me"
из провайдеров, с которыми он умеет работать - IndieLogin предлагает мне выбрать, через какого провайдера я хочу подтвердить, что это я
- IndieLogin начинает OAuth с выбранным провайдером
- Когда всё успешно, то меня перебрасывает на example.org, и я залогинен.
Ключевой момент здесь в том, что example.org получает в конце только https://marinintim.com
,
и не знает, через какой сервис я это подтвердил: я смогу в следующий раз выбрать не Гитхаб,
а Твиттер, или вообще заменить ссылку на своём сайте на другой профиль.
По сути, IndieAuth — это протокол, основанный на OAuth 2.0, в котором указано, что идентификатор пользователя — это URL, который можно открыть в браузере (не вдаваясь в детали: OAuth 2.0 это не протокол, а скорее конструктор, из которого можно собрать протокол, поэтому у всех немного разные реализации).
Чтобы начать использовать это всё как пользователь, достаточно закинуть на свой сайт ссылки на свои аккаунты. Сделать на своём сервисе поддержку IndieAuth несколько сложнее (как обычно с OAuth), поэтому появился IndieLogin, который сильно упрощает поддержку протокола.
И чтобы проверить, что у тебя получилось, можно зайти на сайт pin13.net или завести аккаунт на вики Индивеба.
Конечно, независимость, которая получается в этом случае, тоже не безграничная: регистратор домена может разделегировать домен, или хостинг может отказать хостить твой сайт. Но такие случаи происходят сильно реже, чем когда кто-нибудь в централизованных веб-сервисах решает забанить пользователей по каким-то причинам.