burbilog [livejournal.com]: Гадость этот OpenID, жуткая

burbilog [livejournal.com]
Wed, 30 Jan 2013 20:40:01 +0400

Недавно была идея прикрутить к одному проекту OpenID. Покрутил, покрутил, и плюнул -- слишком коряво и слишком много власти дает сторонним сайтам, плюс это очень плохо масштабируется, стоит только задуматься о более-менее серьезном росте трафика, т.к. у всех сторонних сайтов жесткая политика относительно ботов (а аутентификация -- тоже бот, т.к. резкая вспышка посещаемости = бан). Фейсбук и прочие -- это вообще только с матом можно обсуждать.

Вообще распределенную аутентификацию надо было сразу прорабатывать еще на уровне http протокола в 90е годы. На мой взгляд самым лучшим был бы вариант использования DNS для хранения ключей, причем как открытого, так и закрытого, в TXT записях. Как-то так:

IN TXT "SEC=..........:OPEN=............"

Секретный ключ накрыт паролем пользователя. Для аутентификации сервер дергает открытый ключ и шифрует им большое случайное число, отдает клиенту. Клиента браузер просит его ввести домен и пароль, причем окно отличается от любых javascriptовских так, чтобы это нельзя было подделать, дергает секретный ключ, дешифрует его введенным паролем пользователя, расшифровывает соль, отдает серверу. Все, установлено точно, что человек с паролем, которым зашифрована запись SEC, соответствует этому домену. Домен = идентификатор, а там что угодно можно накручивать, при желании можно из другой TXT foaf дернуть. Минимум работы для браузера, минимум для сервера.

Вот это и надо было в стандарт класть, еще когда обходились Basic аутентификацией. Этим даже можно воспользоваться в интернет-кафе, если доверять их сисадминам конечно. А пролюбив пароль, можно всегда восстановить DNS, загрузив туда другую пару и выбрав новый пароль.

Уязвимо для простых паролей (т.е. это получается passwd, лежащий в открытом доступе), но это проблема другого порядка и по-другому должна решаться.