5

我试图为 ameritrade 的开发者平台做一些简单的授权。我正在尝试。

根据平台,我需要访问的端点是: https : //auth.tdameritrade.com/auth?response_type=code&redirect_uri= {uri}&client_id={client_id}}%40AMER.OAUTHAP

https://developer.tdameritrade.com/content/simple-auth-local-apps

在查看开发应用程序的 client_id 时,我注意到它们实际上可能是在引用 Applications, Consumer Key 吗?所以我就这样做了,但是在尝试查询信息时,它返回:第三方应用程序可能正试图对您的帐户进行未经授权的访问。 我认为它是消费者密钥的原因列在:https ://developer.tdameritrade.com/content/getting-started

所以我最终做了类似的事情:

from urllib.parse import urlencode, quote_plus
url = "https://auth.tdameritrade.com/auth?response_type=code&redirect_uri={uri}&client_id={client_id}}%40AMER.OAUTHAP".format(
  uri=urlencode("http://localhost", quote_via=quote_plus), 
  client_id="JHBDFGJH45OOUDFHGJKSDBNG"  #Sample
  )

我不认为这是因为我目前在另一个国家,我认为这里还有其他问题。

它并没有遵循它,而是返回带有该信息的 400 错误。我不确定有什么问题。

4

4 回答 4

5

当您错误地复制回调 URI 时会发生这种情况。想象一下,如果这是一个客户端应用程序,并且 TD 检测到该应用程序正试图将用户发送到与应用程序配置不同的 URL。如果他们向该应用程序发送回调请求,它将接收令牌并获得对您帐户的完全控制权。

您是否仔细检查过是否正确复制了回调 URL、协议名称、端口和尾部斜杠以及所有内容?另外,考虑使用API 库而不是自己编写。您可以在此处找到有关此特定错误的文档。

于 2020-06-13T14:11:22.183 回答
2

我遇到了这个问题,我只是在应用程序的回调 URI 上使用http://127.0.0.1解决了它。

然后我使用了下面的 URL,它按预期工作。

https://auth.tdameritrade.com/auth?response_type=code&redirect_uri=http%3A%2F%2F127.0.0.1&client_id={MyConsumerKey}%40AMER.OAUTHAP

于 2021-02-01T00:57:41.457 回答
1

以防万一有人仍然遇到此问题,请确保回调 URI 的拼写与您在创建应用程序时指定的完全相同。我遇到了这个问题,因为我将 TD 开发者网站上的回调设置为"https://localhost/""https://localhost"在 URL 中使用(最后缺少斜杠)。一旦我在最后添加斜线,它就起作用了。

于 2021-01-05T07:47:19.517 回答
0

我发现问题是由回调 URL 的设置方式引起的。它必须与您在 TD 开发者 API 页面上的应用程序详细信息中输入的回调 URL 完全相同。我尝试了几种排列,并且确实要获得工作授权,两者必须相同。例如。https 或 http .. 是否以“/”结尾,这很重要。也不需要对其进行 URL 编码。

于 2021-12-27T15:46:29.807 回答