【问题标题】:How to use the oAuth authentication of the Deezer API with a desktop application?如何在桌面应用程序中使用 Deezer API 的 oAuth 身份验证?
【发布时间】:2012-11-18 16:19:41
【问题描述】:

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

目前,我被他们的 OAuth 身份验证流程卡住了。

Deezer 的 OAuth 身份验证过程接受两种不同的流程来对用户进行身份验证和授权:服务器端流程和客户端流程。

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

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

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

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

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

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

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

【问题讨论】:

标签: .net winforms oauth deezer


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 非常感谢 :) 我设法使用您提供的技巧对我的应用进行了身份验证。此外,我可以从 URL 获取访问令牌。顺便说一句,我非常喜欢这个移动应用程序。
  • 不客气;)。我从 API 开发团队得到了答案。这个workaroud 是从现在开始的方式。您应该重定向到现有的 URI(我们在服务器端进行 HTTP 重定向)。此外,您可以重定向到托管在某处的静态 HTML 页面,以获得流畅的用户体验。
【解决方案2】:

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

【讨论】:

  • 如果您使用虚拟站点,最好使用保留域,例如 example.org、example.net 和 example.com。见tools.ietf.org/html/rfc2606
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
相关资源
最近更新 更多