Проблема, которую вы видите, не уникальна для OpenID. Любая схема аутентификации без пароля может иметь эту проблему. OAuth (http://oauth.net/) - это решение, являющееся открытым стандартом, которое быстро завоевывает популярность на многих веб-сайтах. Оно полностью не зависит от того, как пользователь аутентифицируется, поэтому его поставщик OpenID не необходимо поддерживать или даже знать, что ваш сайт («поставщик услуг» в терминах OAuth) использует OAuth. Ваш клиент API может быть веб-приложением или даже локальным приложением!
Процесс будет примерно таким:
Роли:
- пользователь: тот, кто имеет учетную запись на вашем веб-сайте.
- поставщик услуг: ваш веб-сайт, имеющий программный API, для доступа к которому требуются учетные данные.
- потребитель: клиент, будь то веб-приложение или локальное приложение, которому необходим доступ к API поставщика услуг.
Расход:
- Пользователь у потребителя. Он указывает, что хочет получить доступ к данным у поставщика услуг.
- Пользователь либо перенаправляется (если пользователь является веб-сайтом), либо открывается браузер (если пользователь является локальным приложением), и пользователь видит веб-сайт поставщика услуг.
- Пользователь уже вошел в систему поставщика услуг через постоянный файл cookie, либо пользователь должен сначала войти в систему поставщика услуг, как это делается (OpenID в вашем случае).
- Поставщик услуг затем спрашивает пользователя: «Потребитель (некоторый потребитель) хочет получить доступ к вашим данным (или нашему API, или что-то еще). Вы хотите разрешить это? (Да / нет)
- Пользователь подтверждает, и окно браузера закрывается или перенаправляется обратно на сайт потребителя.
- С помощью некоторой магии протокола OAuth у потребителя теперь есть секретные учетные данные, которые он может использовать для доступа к вашему API и любой личной информации, которую вы только что авторизовали.
Очевидно, я не могу включить всю спецификацию OAuth здесь, но вы можете надеяться, что из вышесказанного можно решить вашу проблему. Существуют библиотеки OAuth, которые упрощают добавление поддержки.
Если вы используете ASP.NET, я предлагаю http://dotnetopenid.googlecode.com/, так как он недавно добавил поддержку OAuth (v3.0 beta 1).