Twitter oauth_signature 创建

问题描述

我正在尝试关注 Twitter documentation 以使用 OAuth 1.0 将用户登录到 Twitter。

我遇到的问题是尝试创建 oauth_signature,我不明白这里需要做什么

这就是我所拥有的

我按字母顺序生成参数

val consumerKey = "oauth_consumer_key=\"${apiKey}\""
val callback = "oauth_callback=\"${callbackUrl}\""
val method = "oauth_signature_method=\"HMAC-SHA1\""
val version = "oauth_version=\"1.0\""
val timestamp = "oauth_timestamp=\"${epochSeconds()}\""

val allowedChars = ('A'..'Z') + ('a'..'z') + (0..9)
val s = (1..32).map { allowedChars.random() }
    .joinToString("")

val nonce = "oauth_nonce=\"$s\","

signatureBuilder.append("POST")
signatureBuilder.append("&")
signatureBuilder.append(urlEncodeString("https://api.twitter.com/oauth/request_token"))
signatureBuilder.append("&")
signatureBuilder.append(urlEncodeString(callback))
signatureBuilder.append(urlEncodeString("&"))
signatureBuilder.append(urlEncodeString(consumerKey))
signatureBuilder.append(urlEncodeString("&"))
signatureBuilder.append(urlEncodeString(nonce))
signatureBuilder.append(urlEncodeString("&"))
signatureBuilder.append(urlEncodeString(method))
signatureBuilder.append(urlEncodeString("&"))
signatureBuilder.append(urlEncodeString(timestamp))
signatureBuilder.append(urlEncodeString("&"))
signatureBuilder.append(urlEncodeString(version))

现在我必须将该字符串编码为 HMAC-SHA1,但我不知道在尝试对其进行编码时 keyvalue 应该是什么。 twitter documentation 会告诉您如何创建签名,它假定您已经通过身份验证,因为它告诉您使用通过身份验证获得的 oauth_token_secret

这是我用来编码的

fun generateHmacSha1Signature(key: String,value: String): String{
    val type = "HmacSHA1"
    val spec = SecretKeySpec(key.toByteArray(),type)
    val mac = Mac.getInstance(type)
    mac.init(spec)
    val bytes = mac.doFinal(value.toByteArray())
    return bytesToHex(bytes)
}

我在尝试使用 Postman 时能够成功获得响应,但 postman 以某种方式生成oauth_signature

谁能告诉我我在这里遗漏了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)