Подтвердить что ты не робот

Использование OAuth для аутентификации между серверами?

В настоящее время я работаю над тем, чтобы указать новый партнер/публичный API моей компании, который будет ресурсо-ориентированным веб-сервисом RESTful. Отсутствующий фрагмент головоломки в настоящий момент является аутентификацией/авторизацией.

Требования:

  • Первоначально он должен работать в среде сервер-сервер, например. серверное приложение должно иметь возможность идентифицировать себя, чтобы мы знали, кто вызывает API.
  • В будущем мы хотели бы позволить им олицетворять учетные записи пользователей, так как идентифицируемый сервер будет иметь токен, который представляет собой учетную запись пользователя в течение ограниченного периода времени.

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

Однако из того, что я прочитал, я не знаю, подходит ли это для (1) - то есть есть ли способ, которым OAuth может использоваться только для идентификации вызывающего приложения без наличия действительного токена для пользователя и таким образом, не нужно перенаправлять на веб-страницу, чтобы они могли ввести свои учетные данные?

4b9b3361

Ответ 1

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

(Вы можете использовать любой тестовый клиент, чтобы помочь вам выполнить эту ручную часть или, в то время как вы сами реализуете сервер: используйте - с двуглавым Оатом.)

Ответ 2

На самом деле есть две спецификации OAuth, версия с тремя ногами и версия с двумя ногами. 3-футовая версия - это та, которая получает большую часть внимания.

Версия с двумя ногами делает именно то, что вы хотите изначально, она позволяет приложению предоставлять доступ к другому через общий секретный ключ (очень похожий на модель Amazon Web Service, вы будете использовать метод подписи HMAC-SHA1) или через систему открытого/закрытого ключа (используйте метод подписи: RSA-SHA1). Плохая новость заключается в том, что она пока еще не поддерживается еще как версия с тремя ногами, поэтому вам, возможно, придется немного поработать, чем вы могли бы сейчас.

В принципе, OAuth с 2-мя ногами указывает только способ "подписать" (вычислить хэш) несколько полей, которые включают текущую дату, случайное число, называемое "nonce", и параметры вашего запроса. Это очень затрудняет выдачу запросов на ваш веб-сервис.

OAuth медленно, но верно становится общепринятым стандартом для такого рода вещей - вам будет лучше в долгосрочной перспективе, если вы примете его, потому что люди могут использовать различные библиотеки, доступные для этого.

Как одновременная работа двухногих и трехногих в настоящее время довольно сложна, но это возможно (сейчас у Google это работает). http://code.google.com/apis/accounts/docs/OAuth.html

Ответ 3

Greg:

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

Расширение допускает 1-й, 2-й и, конечно же, сторонний (традиционный OAuth), при использовании безопасности токенов и секретов, а также подписи и т.д., которые предоставляет протокол.

В нашей бета-документации по расширению можно найти здесь.

Ответ 4

Если речь идет только о связи между серверами, я бы рассмотрел использование авторизации на основе ключа API - так же, как bit.ly или FriendFeed.