Twitter OAuth request_token:错误代码32,无法验证

时间:2019-10-23 19:20:49

标签: firebase rest oauth twitter-oauth

我正在尝试通过Game Maker应用中的Twitter通过OAuth对用户进行Firebase身份验证(Game Maker不支持SDK)。

通过REST HTTP POST请求(按照https://developer.twitter.com/en/docs/basics/authentication/api-reference/request_token进行此操作,但响应为“错误32,无法对您进行身份验证。”

我已经在Firebase和Twitter的开发人员控制台上设置了我的应用程序,并将API密钥/秘密值复制到Firebase控制台。 Firebase给了我一个callback_url,该URL已在Twitter应用程序上列入白名单。

我正在关注三足式OAuth的Twitter API文档(这是第1步,POST request_token),并检查了无尽的其他资源。

在签名上,我已经使用在线编码器仔细检查了我的HMAC-SHA1编码是否正确。

这是我的HTTP请求:

URL:https://api.twitter.com/oauth/request_token 方法:开机自检 标题:

Host : api.twitter.com,
Content-Type : application/x-www-form-urlencoded,
Authorization :

Oauth oauth_callback="https%3A%2F%2Fbitblock-blast.firebaseapp.com%2F__%2Fauth%2Fhandler", oauth_consumer_key="kEH9VascQh5rGdq6khl0oCfnL", oauth_nonce="p0B7y4w0P334qa633JzF370z89LK0N60", oauth_signature="MTIwMjc1Nzc1MTczODQ1OTUxMzQyMzgxMzIxNzYxODQxMjQyMzkyNTEyMDI3MTI0MjM1", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1571857067", oauth_version="1.0"

正文:“”

标头的签名是从此字典生成的:

oauth_callback      : https://bitblock-blast.firebaseapp.com/__/auth/handler,
oauth_consumer_key  : [TWITTER API KEY],
oauth_nonce     : [NONCE],
oauth_signature_method  : "HMAC-SHA1",
oauth_timestamp"    : [TIMESTAMP],
oauth_version"      : "1.0"

(所有值均由相应的脚本填写)

这是我创建最终签名字符串的方式:

var parameters = map_to_http_parameter_string(header); //Convert to "key=value, key=value" format
var signature_base = string_upper(method) + "&" + percent_encode(url) + "&" + percent_encode(parameters);
var signing_key = [TWITTER_API_SECRET] + "&";

var signature = base64_encode(string_hex_to_binary(hash_hmac(signature_base, signing_key)));

这是签名创建的分步细分:

  1. 串联的“ parameters”字符串: “ oauth_callback = https%3A%2F%2Fbitblock-blast.firebaseapp.com%2F __%2Fauth%2Fhandler&oauth_consumer_key = [API_KEY]&oauth_nonce = 5sR6w60Hz2Uvk10EdW5135O79NuV3y7b&oauth_sign-meth_od” = 1 (如您所见,这些命令是有序的且已百分比编码)

  2. 串联的“基本签名”字符串: “POST&HTTPS%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhttps%253A%252F%252Fbitblock-blast.firebaseapp.com%252F __%252Fauth%252Fhandler%26oauth_consumer_key%3D [API_KEY]%26oauth_nonce%3D5sR6w60Hz2Uvk10EdW5135O79NuV3y7b%26oauth_signature_method% 3DHMAC-SHA1%26oauth_timestamp%3D1571857990%26oauth_version%3D1.0“

  3. 签名密钥“ [TWITTER_API_SECRET]&”(访问密码留空)

  4. 在(基本签名,签名密钥)上运行HMAC-SHA1,编码为base64(由于Game Maker中的HMAC-SHA1生成十六进制ASCII字符串,十六进制至二进制部分是必需的)

    < / li>

最后,我将该签名添加到标头的Authentication值中,然后发送我的HTTP请求。

响应应该是OAuth令牌,相反,我不断收到错误32,无法验证您身份。

我检查了所有内容以查看我在做错什么,但找不到答案。

1 个答案:

答案 0 :(得分:1)

好的,我发现这是一个愚蠢的错字:我在授权标头中写了“ Oauth oauth_callback ...”而不是“ OAuth oauth_callback ...”。