ser*_*0ne 5 java oauth netsuite kotlin
我徒劳地尝试让 OAuth 1.0 身份验证适用于 Oracle Netsuite。当我使用 PostMan 生成身份验证标头时,它可以工作,但我的代码生成了错误的签名,尽管我遵循了我能找到的有关如何为 OAuth 1.0 生成 HMAC-SHA1 签名的所有步骤
源代码(科特林)
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)))
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
Netsuite OAuth 不工作的Node 中有一个工作 oAuth 连接的示例
这行:
headers.Authorization += ',realm="' + config.accountId + '"';
Run Code Online (Sandbox Code Playgroud)
似乎是你所缺少的。
领域不应该是发送到计算签名的哈希的一部分。
| 归档时间: |
|
| 查看次数: |
6813 次 |
| 最近记录: |