OAuth, который не нужен

2010.09.26

Давно слышал о технологии OAuth, которая, якобы, дополняет OpenID, и примерно представлял, зачем это, но не знал подробностей реализации.  Вчера пришлось узнать, восстанавливая связь джаббер-бота TMRadio с Твиттером после отключением парольной аутентификации.

Оказывается, для работы консольного приложения через OAuth нужно:

  1. Зарегистрировать своё приложение на twitter.com, получить два ключа: «consumer key» и «consumer secret».  Эти значения привязаны к приложению, используются для его идентификации и должны быть вписаны в его код.  Какие могут быть секреты, если любой дурак может разобрать программу, вытащить эти значения и начать прикидываться им — не понятно.
  2. С помощью этих значений специальная библиотека формирует URL, по которому человек попадает на twitter.com, где его спрашивают, действительно ли он хочет дать доступ этой программе к своей учётной записи, и что это за доступ — чтение, запись или оба.  Twitter, в случае подтверждения пользователем своих намерений, выдаёт ему семизначный цифровой код, который нужно ввести в приложение.
  3. На основании всех этих данных приложение формирует «access token key» и «access token secret», которые и используются для доступа к профилю конкретного пользователя.

И самое забавное, что вся эта система преследует одну цель: разрешить контроллируемый доступ к данным ползователя, не передавая пароль третьей стороне.  Контроллируемый доступ — это чтение/запись и ограничение по времени.  Интересно, почему нельзя было для сохранения паролей в безопасности придумать, скажем, виртуальных пользователей со своими паролями? Просишь Twitter сгенерировать логин-пароль для чтения обновлений из такого-то листа, действующий 5 часов, вводишь их в программу и пользуешься.

Если хочется обезопаситься от перехвата паролей — можно прикрутить PKI, вместо логина-пароля копировать в программу закодированный в base64 приватный ключ.  Можно было бы завернуть это в библиотеку, чтобы избавиться от кривых реализаций подписывания и base64.  Но зачем было придумывать всю эту кашу из потребителей и токенов, об которую можно сломать голову? Непонятно.

Следить за развитием событий можно через RSS ленту или почтовую рассылку.