Аутентификация автономного настольного приложения Haskell (с использованием учетных записей google/facebook/twitter/etc)

Проблема

Я пишу автономное настольное приложение в Haskell, и я хотел бы иметь поддержку аутентификации в нем. Я хочу, чтобы пользователь мог войти в это приложение с помощью учетной записи google/facebook/etc.

Некоторые исследования

Я нашел несколько протоколов и связанных библиотек haskell:

  • OpenID (openid, authenticate), но, как отметил @Changaco, этот протокол подключен к веб-браузеру.
  • OAuth (authenticate-oauth, hoauth), но первый, по-видимому, сильно связан с Yesod (веб-каркас), а второй поддерживает OAuth version 1.0 (в настоящее время существует версия 2.0)

Вопрос

Возможно ли создать такую ​​проверку подлинности в автономном приложении Haskell? Какую библиотеку я должен использовать? Или, может быть, я должен написать его на С++ и использовать его из Haskell?

Основные требования:

  • Механизм аутентификации должен работать в автономном приложении на всех основных платформах (Linux, Windows, Darwin).
  • Механизм аутентификации должен работать с приложением без gui.

Ответы

Ответ 1

Оригинальный ответ

OpenID работает, отправив пользователя на веб-сайт своего провайдера, а затем перенаправив его обратно на сайт "полагающийся" (cf спецификация OpenID). Для этого процесса требуется веб-браузер, поэтому вам нужно либо интегрировать его в приложение, либо открыть его. В последнем случае вам также нужен способ получить результат процесса аутентификации, попросив пользователя скопировать его или запустить веб-сервер на локальном хостинге.


Второй ответ после обновления вопроса

  • Механизм аутентификации должен работать в автономном приложении на всех основных платформах (Linux, Windows, Darwin).
  • Механизм аутентификации должен работать с приложением без gui.

Без GUI лучшим решением, вероятно, является просто запрос пользователю на его пароль. OpenID и OAuth 1.0 не поддерживают этот прецедент, но OAuth 2.0 делает. authenticate-oauth и hoauth не поддерживают протокол 2.0, но есть пакет hoauth2.


Третий ответ после дальнейших подробностей, приведенных в комментариях

Пользователю будет разрешено создавать ауттинг в веб-службе (и войти в систему с помощью exisitng google/(и т.д.)). У него также будет возможность загрузить автономное приложение, которое после выполнения предложит ему войти - синхронизировать настройки, учетные записи и т.д.

В этом случае я считаю, что самым простым решением является создание уникального "ключа приложения" для каждого пользователя. Затем он может ввести свое имя пользователя и ключ приложения в отдельное приложение для аутентификации на вашем веб-сайте. Этот метод позволяет избежать запроса его пароля Google/etc, который он даже не знает, использует ли он менеджер паролей.