2010-07-30 7 views
10

Я разрабатываю API, который будет использоваться пользователями моих клиентов. Вот как будет выглядеть поток:Дизайн OAuth для API без разрешения пользователя

  1. Пользователь моего облачного сервиса создает ключ API.
  2. Пользователь вводит ключ API в свои собственные приложения.
  3. Пользователь развертывает приложение для своих собственных конечных пользователей.
  4. Приложение обращается к нашему API.

Я ищу советы по обеспечению этого API. Я вижу несколько вопросов:

  1. Ключ API должен быть встроен в приложение пользователя и поэтому уязвим для кражи и злоупотребления.
  2. После того, как ключ API скомпрометирован, его можно легко отключить, но как мои пользователи будут обновлять свои приложения, чтобы использовать новый ключ API, не имея необходимости перестраивать приложение и повторно развертывать.

Есть ли у кого-нибудь идеи о том, как это сделать?

+1

Ваша проблема 1: ключ API должен быть встроен ... Почему? Какой язык/платформа вы используете? –

+0

API не может быть широко открытым. Я собираю информацию из приложения от имени пользователей моей системы. Поэтому мне нужно убедиться, что информация является законной и что она идет в нужную учетную запись в нашей системе. Имеет ли это смысл? –

+0

Эрик, как вы в конечном итоге реализовали это? Каждый метод, который я могу придумать для защиты API *, требует * некоторой формы открытого/закрытого ключа, который страдает от этой безопасной уязвимости. Я специально думаю о тех приложениях Android, которые были загружены/отправлены ранее в этом году с помощью вредоносного ПО.FWIW, Twitter, похоже, решает эту проблему, выпуская общедоступные/закрытые ключи для * приложения *, а не для учетной записи, поэтому, если приложение скомпрометировано, все приложение отключается до тех пор, пока не будет выпущена новая версия с новыми ключами. http://dev.twitter.com/pages/auth –

ответ

0

Два решения, которые я могу видеть этого, хотя я уверен, что есть больше ..

  1. сигнатурный метод RSA Использовать OAuth, и осуществлять безопасный обмен сертификации ключей с помощью «сервис на основе облачных «в качестве механизма обмена (или государственного поставщика сертификатов).

  2. Внедрение службы, которая позволяет клиентам «обновлять» свой потребительский ключ/секрет автоматически, но затем защищать этот механизм с помощью RSA или другого метода шифрования с открытым ключом.

Это не так просто и потребует от ваших приложений пользователя «позвонить домой», чтобы обновить их потребительские ключи.

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

+4

Поскольку приложение распространяется на кучу ненадежных пользователей, не может ли кто-либо из них просто декомпилировать приложение и получить потребительские и секретные ключи и иметь возможность злоупотреблять службой? Я не могу понять способ, который предотвратит этот тип злоупотреблений. Единственное, о чем я могу думать, это иметь возможность блокировать IP-адреса, которые злоупотребляют службой. –

1

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

Было бы медленнее и требовать больше работы со стороны ваших клиентов, но и безопаснее.

Смежные вопросы