使用“用户凭据”流程通过libcurl获取身份验证令牌

时间:2012-04-04 18:07:27

标签: curl libcurl soundcloud

我正在尝试使用Soundcloud API在开源DAW应用程序(Ardor)中实现集成的“导出”功能。

至少对于初稿,似乎获取经过身份验证的令牌的最简单方法是使用“用户凭据”流程。所以我用我自己的帐户作为例子。我正在使用libcurl以编程方式生成此请求:

https://api.soundcloud.com/oauth2/token?client_id=e7ac891eef866f139773cf8102b7a719&client_secret=CLIENT_SECRET&grant_type=password&username=ben@harrisonconsoles.com&password=MY_PASSWORD

结果是:“404 - Not Found”

几个问题:

1)在这种情况下,有什么想法“404 - Not Found”意味着什么?我的用户名是否格式错误?我弄错了吗?或者用户凭据工作流程不再可用?

2)这是一个开源应用程序,因此client_id和client_secret实际上可供全世界使用。这有什么后果(如果有的话)?

请注意,我不是curl / web集成的专家(尽管我能够使用libcurl从Freesound.org导入声音) - 所以也许我错过了一些非常明显的东西。

1 个答案:

答案 0 :(得分:0)

看起来您正在向该网址发出GET请求。 OAuth2令牌端点仅支持POST请求。此外,参数必须在请求正文中发送,而不是作为查询字符串的一部分。使用curl命令行实用程序,如下所示:

curl -X POST -D - https://api.soundcloud.com/oauth2/token -F'client_id=YOUR_CLIENT_ID' \
   -F'client_secret=YOUR_CLIENT_SECRET' -F'grant_type=password' \
   -F'username=YOUR_USERNAME' -F'password=YOUR_PASSWORD'

从技术上讲,我们应该发回405而不是404.我会为此提交一个错误,谢谢你指出来。

您绝对不想分发您的客户端凭据。您的客户端ID和客户端密钥唯一地标识您的SoundCloud应用程序。如果您要分发这些,那么任何其他应用程序开发人员都可以使用这些值来创建看起来像您的应用程序。如果其中一个应用程序违反了SoundClouds服务条款,我们将不得不切断对客户端ID的访问,从而禁用您的应用程序。

此外,虽然支持用户凭据流,但仅在无法使用更受欢迎的授权代码流时才建议使用。授权代码流程对大多数用户来说更为熟悉。它允许您让用户授权访问您的应用程序,而无需他们为您的应用程序提供凭据。不建议使用用户凭据流的主要原因是通过Facebook Connect注册的用户没有密码,因此无法将您的应用程序连接到他们的SoundCloud帐户。

对于桌面/移动应用程序,您可以在应用程序注册过程中指定使用自定义协议方案(例如myapp://)的重定向URI,该方案将控制权传递回您的应用程序。这样做的确切方法从平台变为平台。这意味着您不必拥有正在运行的Web服务来调解身份验证流程。

如果您有任何后续问题,请告诉我,我会编辑我的答案。希望有所帮助!