BrowserID: почтовый адрес как ID пользователя
Mozilla закончила разработку BrowserID — единой децентрализованной системы аутентификации, которая использует HTML5, криптографию с открытым ключом и цифровые подписи. Она основана на упрощённой интерпретации Verified Email Protocol.
Даже сейчас, на первом этапе внедрения, система довольно проста для пользователя: ему нужно один раз подтвердить email, после чего он получает возможность безопасной авторизации на любом сайте в два клика мышкой, без ввода пароля. В будущем авторизация ещё более упростится, когда поддержку BrowserID внедрят в браузеры, а почтовые провайдеры станут центрами идентификации первого уровня.
Так будет работать система, если Gmail станет поддерживать BrowserID. В этом случае отпадёт необходимость подтверждать свой email на сайте Browserid.org, который сейчас является пока единственным центром идентификации первого уровня.
Кроме отсутствия паролей, ключевым преимуществом BrowserID является защита приватности — в отличие от OpenID и всех подобных систем, провайдер identity в BrowserID не получает данных о том, на каком сайте залогинился пользователь.
Для поддержки BrowserID достаточно включить библиотеку include.js, добавив следующую строчку в заголовок страницы:
<script src="https://browserid.org/include.js" type="text/javascript"></script>
Вместо кастомной кнопки можно поставить одну из стандартных, которые предлагаются для BrowserID.
По нажатию на кнопку осуществляется вызов функции верификации адреса электронной почты.
navigator.id.getVerifiedEmail(function(assertion) {
if (assertion) {
// This code will be invoked once the user has successfully
// selected an email address they control to sign in with.
} else {
// something went wrong! the user isn't logged in.
}
});
После успешной проверки адреса электронной почты API возвращает вам подписанную строку assertion
, которая подтверждает email пользователя.
На втором этапе вам нужно верифицировать assertion
и получить email пользователя. Это делается запросом к https://browserid.org/verify с двумя параметрами POST
(assertion
и audience
) — запрос подписан уже вашей подписью. Верификатор проверяет валидность assertion
.
$ curl -d "assertion=<ASSERTION>&audience=https://mysite.com" "https://browserid.org/verify"
{
"status": "okay",
"email": "lloyd@example.com",
"audience": "https://mysite.com",
"expires": 1308859352261,
"issuer": "browserid.org"
}
Проверку assertion
можно осуществлять и на собственном сервере, см. спецификации и исходники верификатора. В этом случае обеспечивается абсолютная защита информации — провайдер identity не получает данных о том, на каком сайте залогинился пользователь.
Демо BrowserID (с конференции Mozilla All Hands в сентябре 2011 г.)