Аутентификация OpenID и доступ к API - PullRequest
16 голосов
/ 13 февраля 2009

Аутентификация OpenID по своей сути основана на браузере. Если бы я хотел позволить пользователю OpenID проходить аутентификацию по API для использования в альтернативных клиентах, есть ли для этого приемлемый метод?

Так что, если пользователь попытается войти с помощью своего OpenID, например, в приложение для iPhone, как это будет работать? Единственное, что я могу придумать, это создать для них какой-нибудь токен API и заставить пользователя вручную ввести его где-нибудь. Этот подход не удобен для пользователя.

Так работают такие сайты, как Basecamp , но мне все равно это кажется неуклюжим.

Ответы [ 4 ]

16 голосов
/ 17 февраля 2009

Проблема, которую вы видите, не уникальна для OpenID. Любая схема аутентификации без пароля может иметь эту проблему. OAuth (http://oauth.net/) - это решение, являющееся открытым стандартом, которое быстро завоевывает популярность на многих веб-сайтах. Оно полностью не зависит от того, как пользователь аутентифицируется, поэтому его поставщик OpenID не необходимо поддерживать или даже знать, что ваш сайт («поставщик услуг» в терминах OAuth) использует OAuth. Ваш клиент API может быть веб-приложением или даже локальным приложением!

Процесс будет примерно таким:

Роли:

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

Расход:

  1. Пользователь у потребителя. Он указывает, что хочет получить доступ к данным у поставщика услуг.
  2. Пользователь либо перенаправляется (если пользователь является веб-сайтом), либо открывается браузер (если пользователь является локальным приложением), и пользователь видит веб-сайт поставщика услуг.
  3. Пользователь уже вошел в систему поставщика услуг через постоянный файл cookie, либо пользователь должен сначала войти в систему поставщика услуг, как это делается (OpenID в вашем случае).
  4. Поставщик услуг затем спрашивает пользователя: «Потребитель (некоторый потребитель) хочет получить доступ к вашим данным (или нашему API, или что-то еще). Вы хотите разрешить это? (Да / нет)
  5. Пользователь подтверждает, и окно браузера закрывается или перенаправляется обратно на сайт потребителя.
  6. С помощью некоторой магии протокола OAuth у потребителя теперь есть секретные учетные данные, которые он может использовать для доступа к вашему API и любой личной информации, которую вы только что авторизовали.

Очевидно, я не могу включить всю спецификацию OAuth здесь, но вы можете надеяться, что из вышесказанного можно решить вашу проблему. Существуют библиотеки OAuth, которые упрощают добавление поддержки.

Если вы используете ASP.NET, я предлагаю http://dotnetopenid.googlecode.com/, так как он недавно добавил поддержку OAuth (v3.0 beta 1).

4 голосов
/ 27 августа 2009

Ни OpenID, ни OAuth не определяют способ аутентификации пользователя. Они определяют, как потребитель направляет пользовательский агент провайдеру аутентификации, как пользовательский агент направляется назад и как потребитель может проверить идентичность, которую пользователь аутентифицировал как.

Фактический метод, использованный для аутентификации, является внеполосным для обеих схем.

Существуют различия между OpenID и OAuth, но оба требуют, чтобы потребитель использовал HTTP-перенаправления и URL-адреса обратного вызова. Они оба основаны на браузере. Если ваше приложение говорит по HTTP, оно может сделать и то и другое. Однако главное - пользователь вводит учетные данные только в доверенное приложение.

2 голосов
/ 13 февраля 2009

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

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

1 голос
/ 13 февраля 2009

См .: этот связанный вопрос

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

Надеемся, что больше поставщиков охватят OAuth . В качестве альтернативы вы можете передать код аутентификации для нескольких крупных сайтов.

...