2012-11-30 45 views
2

我开始编写使用Deezer Api的Winforms应用程序。如何在桌面应用程序中使用Deezer API的oAuth认证?

现在,我坚持自己的OAuth认证过程。

的Deezer的OAuth认证过程接受两个型动物流动,以获取用户身份验证和授权:在服务器端流和客户端流。

  • 服务器端的流量使用Web应用程序
  • 客户端流量使用浏览器的客户端应用程序的JavaScript和移动应用。

我认为(也许错误地)我可以使用客户端流程,以获得一个WinForms应用程序通过认证用户:

然后我写了启动的Deezer登录网页的web浏览器控件的窗体,认为我可以在获取访问令牌后解析Response。通常,如果我将response_type=token参数添加到登录页面URL,该页面将允许使用该页面。

不幸的是,还有一个redirect_uri参数也必须提供。但是,我不打算使用网站,因为它不适用于我的情况。

显然,没有办法欺骗这一点,登录页面显示错误消息,说明缺少,并拒绝启动验证过程。

之前要问的Deezer有关如何使用他们的API对一个WinForm应用程序,我想知道是否有人已经碰到了这一点,以及他如何设法解决它。

因为我是新来的OAuth,我想知道如果我错过了一些点,或者API的Deezer并不适用于我的情况。

+0

我不知道答案,但你可以阅读这个线程http://stackoverflow.com/questions/3744336/oauth-for-desktop-apps – fabricio

+0

非常感谢你的指针。不幸的是,我没有设法使它工作。我认为它来自于在服务器端实现Deezer OAuth的方式:它绝对需要redirect_uri。 – Larry

回答

1

我试图得到一个解决方法您的问题。这是我有:

  1. 使用Web浏览器,浏览到OAuth的连接URI,
  2. 使用域/子网域控制作为重定向URI。我们不需要真正的网络服务。例如http://deezerauth.maneu.net
  3. 添加事件处理程序的Navigating事件WebBrowser控件。

在此事件处理程序,执行类似下面的代码。

if(e.Uri.AbsoluteUri.Contains("http://deezerauth.maneu.net")) 
{ 
    e.Cancel = true; 
    MessageBox.Show("Welcome on Deezer."); 
} 

声明:我为Deezer移动团队工作,而不是在API团队工作。我已将这个问题转发给他们,看看他们是否有更好的解决方案。

+0

非常感谢:)我设法让我的应用程序使用你给的技巧进行验证。另外,我可以从URL获取访问令牌。顺便说一句,我很喜欢这个移动应用程序。 – Larry

+0

不客气;)。我从API开发团队获得了我的答案。这_workaroud_是从现在开始的方式。你应该重定向到一个现有的URI(我们在服务器端做一个HTTP重定向)。此外,您可以重定向到某个地方托管的静态HTML页面,以便为用户提供流畅的体验。 – Christopher

1

我终于找到了破解的REDIRECT_URI:

“http://blank.org” 工作!在这种情况下,我将“blank.org”作为我的应用程序的域名在适当的Deezer MyApp屏幕中显示。

https://connect.deezer.com/fr/oauth/auth.php? 
     app_id=******&redirect_uri=http://blank.org&perms=basic_access 
     &response_type=token 

然后访问令牌出现在url中,我只需要从WebBrowser控件中获取它!

我会将此作为临时解决方案,然后才能找到更优雅的东西。

编辑:忘记http://blank.org

这似乎是一个非常糟糕的主意,把我们没有自己的虚拟域名的站点。如果该网站确实存在,那么包含我们access_token的重定向网址将被其网络服务器记录下来,这非常糟糕。最好是给定义一个不存在的虚拟域名,然后把http://放在redirect_uri参数的前面。我将被抛出一个“未找到的网站”,但至少我会得到我的access_token。

+0

如果您使用的是虚拟网站,最好使用保留的网域,如example.org,example.net和example.com。请参阅http://tools.ietf.org/html/rfc2606 –

相关问题