3

我开始编写一个使用Deezer Api的 Winforms 应用程序。

现在,我坚持使用他们的OAuth 身份验证过程。

Deezer 的 OAuth 认证过程接受两种不同的流程来获得用户的认证和授权:服务器端流程和客户端流程。

  • Web 应用程序使用服务器端流程
  • 客户端流程与 javascript 和移动应用程序中的浏览器客户端应用程序一起使用。

我假设(可能是错误的)我可以使用客户端流程来让用户在 Winforms 应用程序中进行身份验证:

然后我编写了一个表单,在 WebBrowser 控件中启动 Deezer 登录网页,认为我可以解析响应后获取访问令牌。通常,如果我将response_type=token参数添加到登录页面 URL,页面会允许它。

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

显然,没有办法欺骗这一点,登录页面显示一条错误消息,指出它丢失并拒绝启动身份验证过程。

在询问 Deezer 如何针对 Winform 应用程序使用他们的 API 之前,我想知道是否有人已经遇到过这个问题,以及他是如何解决这个问题的。

因为我是 OAuth 新手,所以我想知道我是否遗漏了一些要点,或者 Deezer API 是否不适用于我的场景。

4

2 回答 2

2

我试图为您的问题找到解决方法。这就是我所拥有的:

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

在此事件处理程序中,执行类似于以下代码的操作。

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

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

于 2012-12-13T17:24:17.473 回答
1

我终于找到了 redirect_uri 的破解方法:

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

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 的重定向 URL 将被他们的 Web 服务器记录,这是非常糟糕的。最好是定义一个不存在的虚拟域名,然后在redirect_uri参数中把http://放在前面。我会被抛出一个“找不到站点”,但至少我会得到我的 access_token。

于 2012-11-30T19:32:08.103 回答