使用OAuth2授权Flattr桌面应用程序的推荐方法是什么?

时间:2013-09-07 16:10:13

标签: oauth-2.0 desktop-application flattr

我正在为RSS桌面客户端构建一个插件,允许用户直接在客户端内处理事物(即博客帖子)。由于它是一个Java应用程序,我使用flattr4j,到目前为止它本身也能正常工作。

我唯一的问题在于使用OAuth 2.0的授权工作流程。由于flattr使用section 4.1 of the OAuth 2.0 spec中描述的授权工作流程,我需要遵守那里提到的先决条件,即

  

授权代码授予类型用于获取访问令牌和刷新令牌,并针对机密客户端进行了优化。作为基于重定向的流,客户端必须能够与资源所有者的用户代理(通常是Web浏览器)进行交互,并且能够从授权服务器接收传入请求(通过重定向)。

我设法通过

实现这个工作流程
  1. 将Web浏览器控件嵌入到我的应用程序中(我可以概括地使用用户的真实Web浏览器)

  2. 运行一个微小的本地HTTP服务器,该服务器通过OAuth回调URL机制受到Web浏览器的攻击,以便接收OAuth代码

  3. 特别是最后一点看起来容易出错。由于我需要提前注册回调URL(例如在我的情况下http://localhost:port/whatever),我强迫推测一个安全的,未使用的本地端口,以便运行一个接收OAuth代码的本地HTTP服务器授权工作流程结束。

    另一方the flattr4j documentation mentions a different workflow,对我的用例看起来更吸引人:

      

    基于“客户端”的应用程序无法提供回调网址。例如,桌面或移动设备应用程序根本不运行Web服务器。对于基于客户端的应用程序,Flattr将在网站上显示验证代码。用户将被要求在您的应用程序中输入代码,以完成身份验证过程。

    进一步向下:

      

    当用户接受时,Flattr会生成验证码。如果应用程序已注册为“浏览器”,则将使用代码和状态作为参数调用您声明的回调URL。对于“客户端”应用程序,代码将呈现给用户,并要求他手动输入应用程序中的代码。

    在我看来,这个工作流程可能并不完美,但对桌面应用程序来说更加健壮。

    (至于应用程序注册:我使用平台桌面(任意)注册我的应用程序。与上面提到的“浏览器”与“客户端”相比,该平台似乎更细粒度“替代方案。”

    所以我的问题是:

    1. Flattr还支持无回调OAuth工作流程吗? (有没有得到支持?)
    2. 如果是这样:我该如何启动此工作流程?
    3. 如果没有:我的问题是否有效,或者是“开放式网络浏览器,启动授权流程并通过本地运行的HTTP服务器接收OAuth代码”,那么只是前进的方向?有没有我忽视的替代方案?
    4. 更新我正在调查另一个选项:我设置了一个“OAuth登录页面”,用作回调网址。本网站的唯一目的是显示OAuth代码,然后由用户将其复制到桌面应用程序。不完美,但目前对我来说看起来更健壮......

1 个答案:

答案 0 :(得分:1)

flattr4j文档还说当前的Flattr API不支持“客户端”授权。在早期版本的API中支持无回调OAuth(直到2012年4月),但现在不再支持了,似乎它不会再回来了......

还有另一种选择which is used on Android systems。您可以在操作系统中注册自己的协议(例如“flattr4j://”),并将适当的回调URL传递给Flattr。当身份验证过程返回此回调URL时,您的操作系统将调用您的应用程序并传入应用程序密钥和密钥。但是,我认为这种方法很难实现,尤其是当您尝试查找独立于操作系统的解决方案时。

可悲的是,我没有别的办法知道。