有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Twitter oauth_签名创建

我正在尝试跟随twitterdocumentation使用OAuth1.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应该是什么。告诉您如何创建签名的twitterdocumentation假设您已经通过身份验证,因为它告诉您使用通过身份验证获得的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

有人能告诉我这里缺少什么吗


共 (0) 个答案