OAuth, который не нужен
Давно слышал о технологии OAuth, которая, якобы, дополняет OpenID, и примерно представлял, зачем это, но не знал подробностей реализации. Вчера пришлось узнать, восстанавливая связь джаббер-бота TMRadio с Твиттером после отключением парольной аутентификации.
Оказывается, для работы консольного приложения через OAuth нужно:
- Зарегистрировать своё приложение на twitter.com, получить два ключа: «consumer key» и «consumer secret». Эти значения привязаны к приложению, используются для его идентификации и должны быть вписаны в его код. Какие могут быть секреты, если любой дурак может разобрать программу, вытащить эти значения и начать прикидываться им — не понятно.
- С помощью этих значений специальная библиотека формирует URL, по которому человек попадает на twitter.com, где его спрашивают, действительно ли он хочет дать доступ этой программе к своей учётной записи, и что это за доступ — чтение, запись или оба. Twitter, в случае подтверждения пользователем своих намерений, выдаёт ему семизначный цифровой код, который нужно ввести в приложение.
- На основании всех этих данных приложение формирует «access token key» и «access token secret», которые и используются для доступа к профилю конкретного пользователя.
И самое забавное, что вся эта система преследует одну цель: разрешить контроллируемый доступ к данным ползователя, не передавая пароль третьей стороне. Контроллируемый доступ — это чтение/запись и ограничение по времени. Интересно, почему нельзя было для сохранения паролей в безопасности придумать, скажем, виртуальных пользователей со своими паролями? Просишь Twitter сгенерировать логин-пароль для чтения обновлений из такого-то листа, действующий 5 часов, вводишь их в программу и пользуешься.
Если хочется обезопаситься от перехвата паролей — можно прикрутить PKI, вместо логина-пароля копировать в программу закодированный в base64 приватный ключ. Можно было бы завернуть это в библиотеку, чтобы избавиться от кривых реализаций подписывания и base64. Но зачем было придумывать всю эту кашу из потребителей и токенов, об которую можно сломать голову? Непонятно.
Следить за развитием событий можно через RSS ленту или почтовую рассылку.