15

问题

我正在用 Haskell 编写一个独立的桌面应用程序,我很想在其中提供身份验证支持。我希望用户能够通过 google / facebook / etc 帐户登录此应用程序。

一些研究

我发现了一些协议和相关的 haskell 库:

  • OpenID ( openid , authenticate ) - 但正如@Changaco 所指出的 - 此协议连接到 Web 浏览器。
  • OAuth ( authenticate-oauth , hoauth ) - 但第一个似乎与Yesod(Web 框架)密切相关,第二个支持OAuth版本1.0(目前有可用的版本2.0

问题

是否可以在独立的 Haskell 应用程序中创建这样的身份验证?我应该使用什么库?或者也许我应该用 C++ 编写它并从 Haskell 中使用它?

主要要求是:

  1. 身份验证机制应在所有主要平台(Linux、Windows、Darwin)上的独立应用程序中工作
  2. 身份验证机制应该与没有 gui 的应用程序一起使用。
4

1 回答 1

5

原始答案

OpenID 的工作原理是将用户发送到其提供商的网站,然后将其重定向回“依赖”网站(参见OpenID 规范)。这个过程需要一个网络浏览器,所以你要么必须将一个集成到你的应用程序中,要么打开一个。在后一种情况下,您还需要一种方法来获取身份验证过程的结果,方法是要求用户复制粘贴它,或者在 localhost 上运行 Web 服务器。


问题更新后的第二个答案

  1. 身份验证机制应在所有主要平台(Linux、Windows、Darwin)上的独立应用程序中工作
  2. 身份验证机制应该与没有 gui 的应用程序一起使用。

如果没有 GUI,最好的解决方案可能就是提示用户输入密码。OpenID 和 OAuth 1.0 不支持此用例,但OAuth 2.0支持。authenticate-oauth 和 hoauth 不支持 2.0 协议,但是有一个hoauth2 包


在评论中提供更多详细信息后的第三个答案

用户将被允许在网络服务中创建帐户(并使用现有的 google / (etc) 帐户登录)。他还可以下载独立的应用程序,执行后会提示他登录 - 以同步设置、帐户等。

在这种情况下,我认为最简单的解决方案是为每个用户生成一个唯一的“应用程序密钥”。然后,他可以在独立应用程序中输入他的用户名和应用程序密钥,以对您的网站进行身份验证。这种方法避免了向他询问他的 Google/etc 密码,他甚至可能不知道他是否使用密码管理器。

于 2013-08-30T00:27:53.847 回答