2012-03-02 2 views
0

Я полагал, что на это был дан ответ раньше, но быстрый SO search ничего не принес.Безопасный доступ к данным для API RESTful

У меня есть частный API, который заблокирован APIKey. Этот ключ необходимо передать для каждого запроса. С помощью этого ключа вы можете получить доступ к любой части API. Очевидно, это довольно открыть. По большей части это приемлемо. Однако есть случаи, когда я хочу убедиться, что запрос отправлен владельцем данных.

Например, или удалить запрос. Вы не сможете сделать этот запрос для чужих данных. Поэтому в дополнение к APIKey, я хотел бы иметь что-то еще, чтобы убедиться, что этот пользователь, делающий запрос, разрешил выполнить это действие.

Я мог бы потребовать, чтобы ownerID был отправлен с таким запросом. Но это быстро подделано. Так что я получил.

Мне интересно узнать, какие другие члены SO реализованы в этих ситуациях. Индивидуальные APIKeys? Двойная авторизация?

Если это имеет значение, мой API следует архитектуре REST и разработан с использованием PHP/Apache.

ответ

0

Ключи API должны быть уникальными для каждого пользователя. Это проверит пользователя и будет иметь доступ к данным.

Если вы хотите быть еще более безопасным, вы можете использовать этот секрет api в качестве токена обновления, который может быть использован для получения токена доступа с автоматическим истечением срока действия.

Также предлагается SSL для всех запросов.

+0

Можете ли вы уточнить токен * обновления. –

+0

https://tools.ietf.org/html/draft-ietf-oauth-v2-23#section-1.5 – abraham

0

Каждый пользователь API имеет уникальный ключ API. Этот ключ идентифицирует их как единого пользователя системы. При работе с более конфиденциальными данными я использовал client side certificates для auth, однако Basic Auth + требует SSL, как правило, достаточно.

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

Вся часть «определить владельца» - это отдельная проблема, которая может быть сложно сделать в API в зависимости от того, насколько хорошо система была построена. Я могу поделиться тем, как мы это делали в прошлом, но подумал, что это немного не по теме.

0

Предлагайте вам рассмотреть возможность использования Oauth. Таким образом, это то, как он должен работать.

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

Каждый конечный пользователь, связанный с использованием, должен аутентифицироваться отдельно (независимо от apikey) во время процесса авторизации Oauth. Идентификатор пользователей, связанный контекст, такой как область полномочий, затем кодируется в токен, называемый токеном доступа.

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

На стороне реализации API проверка доступа к токенам должна раскрывать контекст конечного пользователя (включая область доступа, предоставляемую во время процесса Oauth), и, следовательно, доступ/авторизация для использования определенного ресурса может управляться посредством сервер ресурсов.

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