我正在为RSS桌面客户端构建一个插件,允许用户直接在客户端内处理事物(即博客帖子)。由于它是一个Java应用程序,我使用flattr4j,到目前为止它本身也能正常工作。
我唯一的问题在于使用OAuth 2.0的授权工作流程。由于flattr使用section 4.1 of the OAuth 2.0 spec中描述的授权工作流程,我需要遵守那里提到的先决条件,即
授权代码授予类型用于获取访问令牌和刷新令牌,并针对机密客户端进行了优化。作为基于重定向的流,客户端必须能够与资源所有者的用户代理(通常是Web浏览器)进行交互,并且能够从授权服务器接收传入请求(通过重定向)。
我设法通过
实现这个工作流程将Web浏览器控件嵌入到我的应用程序中(我可以概括地使用用户的真实Web浏览器)
运行一个微小的本地HTTP服务器,该服务器通过OAuth回调URL机制受到Web浏览器的攻击,以便接收OAuth代码
特别是最后一点看起来容易出错。由于我需要提前注册回调URL(例如在我的情况下http://localhost:port/whatever
),我强迫推测一个安全的,未使用的本地端口,以便运行一个接收OAuth代码的本地HTTP服务器授权工作流程结束。
另一方the flattr4j documentation mentions a different workflow,对我的用例看起来更吸引人:
基于“客户端”的应用程序无法提供回调网址。例如,桌面或移动设备应用程序根本不运行Web服务器。对于基于客户端的应用程序,Flattr将在网站上显示验证代码。用户将被要求在您的应用程序中输入代码,以完成身份验证过程。
进一步向下:
当用户接受时,Flattr会生成验证码。如果应用程序已注册为“浏览器”,则将使用代码和状态作为参数调用您声明的回调URL。对于“客户端”应用程序,代码将呈现给用户,并要求他手动输入应用程序中的代码。
在我看来,这个工作流程可能并不完美,但对桌面应用程序来说更加健壮。
(至于应用程序注册:我使用平台桌面(任意)注册我的应用程序。与上面提到的“浏览器”与“客户端”相比,该平台似乎更细粒度“替代方案。”
所以我的问题是:
更新我正在调查另一个选项:我设置了一个“OAuth登录页面”,用作回调网址。本网站的唯一目的是显示OAuth代码,然后由用户将其复制到桌面应用程序。不完美,但目前对我来说看起来更健壮......
答案 0 :(得分:1)
flattr4j文档还说当前的Flattr API不支持“客户端”授权。在早期版本的API中支持无回调OAuth(直到2012年4月),但现在不再支持了,似乎它不会再回来了......
还有另一种选择which is used on Android systems。您可以在操作系统中注册自己的协议(例如“flattr4j://”),并将适当的回调URL传递给Flattr。当身份验证过程返回此回调URL时,您的操作系统将调用您的应用程序并传入应用程序密钥和密钥。但是,我认为这种方法很难实现,尤其是当您尝试查找独立于操作系统的解决方案时。
可悲的是,我没有别的办法知道。