Кажется, что это широко задаваемые вопросы, и после того, как я прочитал множество документов по этому вопросу, я все еще не уверен, что все правильно понял (я полагаю, что быть немым - это возможный ответ;)).
Я пытаюсь создать API, который предоставит пользователям сервис. Пользователи будут подключены через Facebook или любой провайдер OpenId (я отделяю Facebook, так как они реализуют свою собственную систему подключения).
(Я думаю, что это хороший способ, потому что я не буду хранить пароль пользователя и, наконец, будет иметь меньше проблем в случае аналогичной проблемы Gawker.)
Когда запрос поступает от клиента (веб-приложение, мобильное приложение и т.д.) к API, индикатор должен быть отправлен с запросом, чтобы определить, какой пользователь использует приложение. Обычно это используется с помощью токена, определенного во время аутентификации.
Но в отношении аутентификации я не могу найти ценный пример, учебник, пояснения о том, как его правильно реализовать.
Я попробую объяснить:
В моем (чудесном мире счастливых медведей) я структурировал свой проект в разных частях:
- API RESTful
- Веб-приложения, которые будут использовать api. В идеале я думал о создании полного проекта html/css/js без работы на стороне сервера (php/python/java или что-то еще)
- Мобильное приложение
- Приложение windows/mac/linux
Насколько я понял, каждый раз, когда кто-то спрашивает, как реализовать аутентификацию RESTful API, выходят три основных ответа:
- Основной базовый (+ предпочтительно SSL)/дайджест HTTP.
- OAuth
- OpenId
Так как я не буду хранить пароль пользователя, первый из них для меня, но два других оставят меня в недоумении.
Но OAuth и OpenId не являются не, а именами (OpenId) обозначены Аутентификация (в основе вопросов), где вторая (OAuth) означает Авторизация!
Когда Twitter реализует OAuth для своего API, они не внедряют систему аутентификации, устанавливают способ указать своим пользователям, что приложение X хочет иметь доступ к учетной записи пользователя (на разных уровнях доступа). Если пользователь в настоящее время не зарегистрирован в Твиттере, ему будет сначала аутентифицироваться, и затем разрешить текущему приложению получать доступ к его данным.
Итак, просто чтобы прояснить ситуацию, OAuth НЕ является механизмом аутентификации, это:
Открытый протокол для обеспечения безопасного API авторизация (источник: http://oauth.net/)
Тогда единственным способом аутентификации пользователя будет использование OpenId. И тогда, черт возьми, сбывается.
Если я возьму в качестве примера веб-приложение, которое сделано исключительно из html/css/js, без компонентов на стороне сервера, связывается с API.
Веб-приложение должно указать API, что пользователь, который в настоящее время использует API, является мистером X.
Чтобы сделать это, веб-приложение отображает всплывающее окно, содержащее список поставщиков OpenId, и попросит пользователя пройти аутентификацию. Пользователь нажимает на один из них, перенаправляет (или открывает всплывающее окно) поставщику OpenId, указывает свой логин/пароль, получает аутентификацию от провайдера OpenId, который возвращает успех с помощью токена (я упростил связь).
Хорошо, веб-приложение теперь знает, что пользователь действительно мистер X. Но у API все еще есть ключ!
Наконец, мой вопрос довольно прост: как я могу аутентифицировать mister x через веб-приложение API через OpenId, и после этого, как веб-приложение и api могут хранить информацию о том, что это mister X, который в настоящее время использует веб-приложение и, конечно же, API.
Большое спасибо за вашу помощь!
-edited format