Rails: аутентификация через разные домены - PullRequest
1 голос
/ 27 марта 2012

Мне нужно интегрировать разрабатываемое веб-приложение с внешним веб-приложением, чтобы использовать их сервисы.К сожалению, это моя самая первая работа, и я немного запутался.

Они попросили меня предоставить проверочный URL с токеном для входа, чтобы помочь им определить, какие пользователи приходят с моего сайта.

  1. Пользователи моего приложения хотят получать информацию из базы данных приложения 3party
  2. Для этого приложению 3party необходимо знать, кто они, потому что в приложении есть разные роли.И у каждого из них будут разные привилегии в приложении 3party
  3. Вход в приложение 3party должен быть в моем приложении.Им просто нужен проверочный URL с токеном для входа.

Можно ли использовать для этого аутентификацию токена через devise?Могу ли я сгенерировать токен, сохранить его в браузере клиентов и использовать его для аутентификации во внешнем домене?

1 Ответ

3 голосов
/ 27 марта 2012

Надеюсь, этот ответ не слишком очевиден.Похоже, вы только начинаете с этого и нуждаетесь в некотором руководстве.

Из того, что я прочитал, я получаю следующие требования:

  1. Вы должны быть в состоянии пройти проверку подлинностиполномочия для другого приложения
  2. Стороннее приложение хочет обмениваться и проверять учетные данные с помощью токенов авторизации
  3. Стороннее приложение хочет, чтобы URL-адреса вызовов API делали это из вашего приложения

Я расскажу об этом в широком смысле и позволю вам найти конкретное решение.По сути, вам нужен способ генерирования безопасных токенов аутентификации.Devise должен сделать это вместе с authlogic и несколькими другими .То, что вы не хотите делать, это пытаться свернуть свое собственное поколение токенов аутентификации.Обязательно используйте гемы, чтобы сделать это за вас.

После того, как вы получили токены, вот обзор базовой транзакции, где токен аутентификации просто передается в качестве параметра в действие контроллера (https - ваш друг в этой транзакции (FYI).

enter image description here

  1. Стороннее приложение выполняет вызов API с токеном, предоставленным вашим приложением
  2. Вашприложение проверяет подлинность токена аутентификации и выполняет любое запрашиваемое действие, если аутентификация прошла успешно
  3. Ваше приложение отвечает кодом успеха / сбоя аутентификации и любыми другими данными ответа, запрошенными сторонним приложением, если аутентификациябыл успешным

Как токены передаются стороннему приложению, чтобы он мог использовать его для выполнения запросов API, зависит от того, как вы хотите, чтобы ваше приложение работало.Тем не менее, обычной практикой является использование метода, который следует следующему шаблону:

  1. Когда стороннему приложению необходимо сделать запрос API от имени пользователя, стороннее приложение перенаправляет на вашприложение, где пользователь вводит свои учетные данные (если они еще не сделали).Таким образом, стороннее приложение никогда не получает имя пользователя и пароль напрямую.
  2. При успешной аутентификации ваше приложение перенаправляет обратно на URL обратного вызова, передавая в качестве параметра токен аутентификации, сгенерированный вашим приложением. Этот токен авторизации используется в будущих вызовах API до тех пор, пока не истечет срок действия токена аутентификации (разумеется, это зависит от вас, когда он истекает, поскольку вы являетесь администратором аутентификации).

Если это вообще возможно, было бы замечательно, если бы вы действительно могли использовать поставщика OAuth или какой-либо другой механизм, который уже существует в качестве сторонней аутентификации, это означает, что как ваше приложение, так и стороннее приложение доверяют.Чтобы пойти по этому пути, посмотрите этот Railscast: http://railscasts.com/episodes/235-omniauth-part-1

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

С другой стороны, даже если вы не обращаетесь к провайдеру OAuthкак способ решения этой проблемы, упомянутый выше Railscast даст вам идею и шаблон, которому нужно следовать при создании собственного механизма API / обратного вызова.В итоге вы получите серию вызовов / действий API.Маршруты (ссылки на эти вызовы API) могут, конечно, быть чем угодно.Но в качестве примера они могут выглядеть примерно так:

/api/auth/:id                     {:controller=>"api", :action=>"auth"}

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

/api/some/restful/resource/call   # example API call for some RESTful resource you make available
... etc. ...

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

...