Как разработчик сегодня, будь то веб, телефон, компьютер или виджет, вы почти наверняка столкнулись с необходимостью связать свою работу с каким-то API. Здесь может быть запрос cURL или какой-то XML или JSON; Общим знаменателем является то, что общий подход к доступу к материалам с ограниченным доступом состоял в том, чтобы запрашивать его, предоставляя имя пользователя и пароль вместе с каждым вызовом API. Это означает, что каждое взаимодействие с конкретным API передает ваши данные вместе с ним. Как правило, они каким-то образом зашифрованы, но в целом с точки зрения идеальных методов обеспечения безопасности это неубедительно. Более того, необходимость записи деталей где-то делает их потенциально уязвимыми.
OAuth — это относительно новый протокол открытой аутентификации, который обеспечивает безопасную связь API без необходимости непрерывной передачи имени пользователя и пароля при каждом запросе. Идея для OAuth была разработана в 2006 году группой людей, работающих над реализацией OpenID в Twitter. После рассмотрения как OpenID, так и других существующих отраслевых практик, таких как Amazon Web Services API и Flickr API, было решено, что следует написать предложение по новому открытому протоколу для аутентификации приложений. Движение быстро набрало обороты при поддержке, объявленной Google, и в июле 2007 года была составлена первоначальная спецификация. Сегодня мы используем OAuth Core 1.0a с новой спецификацией 2.0.
Как это работает?
Вот реальный пример — тот, который вы, возможно, уже встречали и даже не знали.
Давайте рассмотрим путь OAuth того, как foursquare отправляет твиты от вашего имени:
- foursquare изначально зарегистрировался как «приложение» в Twitter. При этом им предоставляется набор токенов, называемый «ключом потребителя» и его парным «секретом ключа потребителя». Они используются foursquare в коде приложения и являются частью модели OAuth при генерации запросов.
- С точки зрения пользователя, когда вы входите в foursquare и нажимаете кнопку «пожалуйста, свяжите мою учетную запись Twitter», foursquare использует свой потребительский ключ для связи с Twitter и генерирования «токена запроса». Затем вам предоставляется специальный URL-адрес, с помощью которого можно переходить. Вы на сайт Twitter.
- Если вы еще не вошли в Twitter, вам будет предложено сделать то же самое, что и всегда, а затем появится экран с вопросом, хотите ли вы предоставить указанному приложению доступ к вашей учетной записи.
- Нажатие «Разрешить» сообщает Twitter, что это приложение (foursquare), которое запросило доступ с использованием своего определенного ключа потребителя, должно иметь доступ к вашей учетной записи Twitter. Затем Twitter перенаправляет вас обратно в ваше приложение (веб-сайт foursquare) с прикрепленной кодированной строкой подтверждения.
- Затем приложение foursquare считывает ранее сгенерированный токен запроса и принимает возвращенную проверку, чтобы попросить Twitter сгенерировать окончательный набор токенов, называемый «токен доступа» и «секрет токена доступа».
- Теперь, когда вы выполняете действие над квадратом foursquare и его твиттер, foursquare вызывает API-интерфейс Twitter, создавая запрос, используя предоставленный Twitter ключ потребителя и недавно сохраненный токен доступа для вашей учетной записи.
И среди всего этого, ваше имя пользователя и пароль в Twitter никогда не видны, не говоря уже о сохранении, в foursquare.
Кстати, лучшее графическое представление этого процесса, которое я нашел, задокументировано здесь Digg.
Как я могу это реализовать?
Со всеми этими разговорами о жетонах и секретах, летящих взад и вперед, скорее всего, вы окажетесь с пустым выражением лица. Как генерируются токены и в каком порядке это может показаться чрезвычайно сложным. К счастью, OAuth и другие разработали широкий спектр инструментов, классов и простого кода, который легко доступен для различных языков. OAuth предоставляет превосходный список ресурсов, доступных через их веб-сайт .
Кто в настоящее время использует это?
С момента своего создания OAuth получил широкое распространение среди основных веб-сервисов. Крупнейшим и действительно одним из лидеров протокола является Twitter, который не только реализует OAuth в качестве своего основного (и вскоре станет единственным) метода аутентификации API, но и использует его в качестве основы для своего сервиса «Войти через Twitter». Сегодня вы также найдете протокол, используемый Yahoo, Vimeo, Digg и многими другими .
Для тех из вас, кто интересуется более тонкой работой, доступно множество статей и технической документации , в которой подробно описывается, как протокол взаимодействует.