localhost上的HTTPS,用于桌面应用程序的OAuth

时间:2017-10-07 05:09:41

标签: javascript express https oauth electron

我正在创建一个使用Spotify的oauth api的桌面应用程序。我正在使用此处描述的隐式授权流程:https://developer.spotify.com/web-api/authorization-guide/#implicit_grant_flow

我的想法是进行一次"认证"按钮,单击并打开浏览器。您登录/批准与Spotify的连接。然后它会将您发送到重定向网址。

我想将此重定向网址设置为127.0.0.1:58212或环回设备上的某个端口。

我的问题是,我应该使用https吗?

我倾向于是。一个是因为访问令牌需要是安全的,我相信系统上的其他用户可能会在发送消息时读取消息,而另外两个因为在用户登录时,有人可能已经接管了端口。

所以我想要SSL加密消息,我想确保我实际上是在和我的应用程序通话。

如何在这种情况下生成证书?我认为应用程序的每个实例都需要有自己的证书,我需要以某种方式通知计算机在应用程序的生命周期内信任该证书。

我也可以在安装过程中生成证书,并在安装过程中执行一些操作,使系统信任该证书。

我是否以正确的方式思考这个问题,还是我认为这一切都错了?

我在JavaScript中使用电子和表达来编写我的应用程序。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

在已安装的应用程序(如桌面应用程序)中安全使用Oauth的最佳方法是将Oauth 2流程用于已安装的应用程序。但是这个选项必须由服务提供商实现。 Google提供此选项。

https://developers.google.com/api-client-library/python/auth/installed-app

不幸的是,很多服务都没有实现OAuth2。

要将Oauth 1.0与已安装的应用程序一起使用,服务提供程序会向用户显示身份验证代码,而不是返回callback_url,然后用户可以将该代码复制并粘贴到桌面应用程序。查看Trello Ouath集成,允许这样做。

您尝试实现的Web Api流程不适用于桌面应用程序。重定向uri 127.0.0.1:port是您当地的uri。服务提供商至少需要您的公共IP将流重定向回系统。

答案 1 :(得分:0)

AFAIK,对于桌面或本机应用程序,实现Oauth授权代码流要好得多。隐式授权旨在用于设备浏览器,而不是Web视图。

如果您的应用使用网络服务进行连接,则您的网络服务需要使用https的重定向网址。幸运的是,像Heroku这样的大多数托管平台都免费提供给您(否则您需要购买可能需要大量工作的SSL证书)。

在授权代码流上,令牌不需要查看客户端,它全部存储在后端。

大多数服务允许您使用http在localhost上进行测试。 我写了一篇tutorial,可以给你一些关于流程的指导。