【问题标题】:Using "User Credentials" flow to get an authentication token via libcurl使用“用户凭据”流程通过 libcurl 获取身份验证令牌
【发布时间】:2012-04-04 18:07:26
【问题描述】:

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

至少在初稿中,似乎获得经过身份验证的令牌的最简单方法是使用“用户凭据”流程。所以我以我自己的帐户为例。我正在使用 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 - 未找到”

几个问题:

1) 任何想法“404 - 未找到”在这种情况下意味着什么?我的用户名格式错误吗?我打错字了吗?还是用户凭据工作流不再可用?

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

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

【问题讨论】:

    标签: curl libcurl soundcloud


    【解决方案1】:

    您似乎正在向该 URL 发出 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 帐户。

    对于桌面/移动应用程序,您可以在应用程序注册过程中指定一个重定向 URI,该 URI 使用自定义协议方案(例如 myapp://),它将控制权交还给您的应用程序。执行此操作的确切方法因平台而异。这意味着您不必拥有正在运行的 Web 服务来调解身份验证流程。

    如果您有任何后续问题,请告诉我,我将编辑我的答案以进行详细说明。希望对您有所帮助!

    【讨论】:

    • 谢谢保罗!我将调查 libcurl 中需要什么来实现这一点。关于“秘密”ID ...它是一个开源程序,所以别无选择,只能发布它。当然,应用程序不可能破坏 Soundcloud TOS,因为经过身份验证的用户是罪魁祸首?除了将声音“归因”到应用程序之外,这有什么关系呢?最后,关于授权:我愿意使用“授权代码流程”,但在桌面应用程序的上下文中我不理解它。它似乎需要一个第三方服务器作为某种中介。希望我只是感到困惑。
    • 如果您将其作为开放源代码发布,您应该保留客户端凭据并将应用注册作为安装/设置过程的一部分。问题是,您正在泄露凭据。例如,如果有恶意的开发人员想要创建一个会做有害事情的应用程序,他们可以使用您的应用程序凭据并“冒充”您的应用程序。用户会认为他们正在验证您的应用程序。最重要的是,共享凭证会破坏信任关系。泄露客户端机密的应用几乎肯定会被停用。
    • 修改了我的答案以包含有关将身份验证代码流与桌面应用程序一起使用的详细信息。还提到了为什么不推荐使用 User Cred Flow。另外,如果您发现我的回答有帮助,那么“接受”它是一种很好的做法 :-) 希望对您有所帮助。如果您有任何其他问题,请告诉我。
    • 关于客户端凭据:好的,我会努力解决的。关于用户凭证流程:这是一个专业的声音编辑/混合应用程序。您是说用户会因为必须设置 Soundcloud 密码而感到不便,还是说如果他们使用 Facebook Connect,他们不可能设置密码并按照用户凭据流
    • 如果用户使用 Facebook Connect 登录他们的 SoundCloud 帐户,他们将没有密码,因此将无法使用用户凭据流。
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2015-04-18
    • 2017-06-20
    相关资源
    最近更新 更多