Saturday, December 22, 2012

OAuth 2.0: введение

В октябре текущего года стандарт OAuth 2.0 наконец-то вышел из статуса "черновика" и превратился в RFC. Все больше сервис-провайдеров начинают поддерживать OAuth в своих API. Что же такое OAuth и зачем он нужен?

Согласно RFC, этот протокол позволяет предоставить третьему лицу (клиенту) ограниченный доступ к какому-либо HTTP-сервису от имени пользователя. При этом клиент использует для авторизации не параметры доступа пользователя (e.g. логин и пароль), а полученный от сервиса токен. Это во многом повышает секьюрность модели аутентификации:
  • Клиенту не надо хранить параметры доступа пользователя в виде плэйнтекста.
  • Возможность ограничить полномочия клиента, в т.ч. длительность их предоставления.
  • Возможность отозвать полномочия у конкретного клиента, не затрагивая остальных.
  • Компрометирование какого-либо клиента не приводит к утечке параметров доступа пользователя.
Рассмотрим как происходит OAuth-авторизация с использованием авторизационного кода. Именно такая схема используется во многих приложениях для авторизации в Facebook и других сервисах.
  1. Приложение (клиент) перенаправляет пользователя на урл авторизации сервиса. В параметрах запроса содержится идентификатор клиента, запрашиваемые права, случайная последовательность символов и урл, на который следует перенаправить пользователя после того, как он подтвердит (или отменит) авторизацию.
  2. Сервис (он же authorization server, он же resource server) авторизует у себя пользователя и устанавливает, подтверждает ли он предоставление запрошенных прав клиенту.
  3. После того, как пользователь подтвердил предоставление прав, сервис редиректит его обратно к клиенту, используя урл, предоставленный в первом запросе. В параметрах урла включается код авторизации, а также случайная последовательность символов, переданная в первом запросе.
  4. Клиент делает запрос к сервису, содержащий полученный код авторизации, а также параметры доступа клиента.
  5. Сервис проверяет параметры доступа клиента, код авторизации и возвращает access token.
  6. Profit!
В принципе, это самая сложная схема авторизации в OAuth 2.0 в настоящий момент. Схема с обменом реквизитов пользователя на access token, например, гораздо проще и по сути представляет собой обычную авторизацию, используемую во многих web-приложениях.

No comments:

Post a Comment