在徒劳我试图得到的OAuth 1.0认证的Oracle NetSuite的合作。当我生成认证头与邮差它的工作原理,但我的代码,生成的签名错误,尽管我跟所有我能找到如何产生HMAC-SHA1签名的OAuth 1.0的步骤
源代码(科特林)
class NetsuiteAuthenticationScheme {
private val algorithm = "HmacSHA1"
private val charset = Charsets.UTF_8
fun setAuthenticationHeaders(headers: HttpHeaders, url: String?) {
val authentication = mutableMapOf(
"realm" to "REALM",
"oauth_consumer_key" to "CONSUMER_KEY",
"oauth_token" to "TOKEN",
"oauth_signature_method" to "HMAC-SHA1",
"oauth_version" to "1.0",
"oauth_timestamp" to "TIMESTAMP",
"oauth_nonce" to "NONCE"
)
val signatureUrl = listOf(
"POST",
URLEncoder.encode(url, charset.displayName()),
URLEncoder.encode(
URLEncodedUtils.format(
authentication
.toList()
.sortedBy { it.first }
.map { BasicNameValuePair(it.first, it.second) },
charset.displayName()
), charset.displayName()
)
).joinToString("&")
val signatureKey = listOf(
"CONSUMER_SECRET",
"TOKEN_SECRET"
).joinToString("&")
authentication["oauth_signature"] = computeSignature(signatureUrl, signatureKey)
val authenticationHeaderValue = authentication
.toList()
.joinToString { "${it.first}=\"${URLEncoder.encode(it.second, charset.displayName())}\"" }
headers.contentType = MediaType.APPLICATION_JSON
headers.add("Authorization", "OAuth $authenticationHeaderValue")
}
private fun computeSignature(data: String, key: String): String {
val mac = Mac.getInstance(algorithm)
mac.init(SecretKeySpec(key.toByteArray(charset), algorithm))
return Base64.encodeBytes(mac.doFinal(data.toByteArray(charset)))
}
}
我做错了什么?