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