标题:'Unsupported Authentication',详细信息:'Authenticating with OAuth 2.0 Application-Only is …OAuth 1.0a User Context, OAuth 2.0 User Context].'

title: 'Unsupported Authentication', detail: 'Authenticating with OAuth 2.0 Application-Only is …OAuth 1.0a User Context, OAuth 2.0 User Context].'

我正在使用 Cloudflare worker,这就是我的 index.ts 文件的样子:

const tweet = async () => {
  console.log('tweet function ran')
  let request = await fetch("https://api.twitter.com/2/tweets", {
    method: "POST",
    headers: {
      Authorization: "Bearer <ACCESS TOKEN HERE>",
      'user-agent': "v2CreateTweetJS",
      'content-type': "application/json",
      'accept': "application/json"
    },
    body: JSON.stringify({"text": "my remote Tweet"})
  })
  console.log(await request.json())
  return new Response("This response ran")
}

addEventListener('fetch', (event: FetchEvent) => {
  event.respondWith(tweet());
});

当我 运行 这段代码时,我得到这个错误:

<myusername>@<mycomputername> <myappname> % wrangler dev
  Listening on http://127.0.0.1:8787
  Detected changes...
  Ignoring stale first change
tweet function ran
{ title: 'Unsupported Authentication', detail: 'Authenticating with OAuth 2.0 Application-Only is …OAuth 1.0a User Context, OAuth 2.0 User Context].', type: 'https://api.twitter.com/2/problems/unsupported-authentication', status: 403 }
[2022-04-23 21:41:58] GET <myappname>.<mycloudflarworkername>.workers.dev/ HTTP/1.1 200 OK
^C
<myusername>@<mycomputername> <myappname> % 

我该如何解决这个问题?我可以切换到 v1 API,但我也找不到有关如何执行此操作的任何信息。

错误信息

Authenticating with OAuth 2.0 Application-Only

表示在 API 请求中发送的不记名令牌代表应用程序,而不代表发送推文的用户。您需要为发送推文的用户获取令牌。

Tweet api 仅接受用户上下文身份验证:

https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets

但是,错误似乎表明同时支持 OAuth 1.0 和 OAuth 2.0。

其他文档页面 通过以下方式证实这一点:

请注意,仍然需要 OAuth 1.0a 才能代表用户发出请求。

https://developer.twitter.com/en/docs/authentication/oauth-2-0/application-only

所以这两种方法你应该没问题。

OAuth 1.0a auth header 在这里描述

https://developer.twitter.com/en/docs/authentication/oauth-1-0a/authorizing-a-request