java - 如何在 RestAssured 中设置 OAuth 领域
问题描述
我正在使用 RestAssured 库来自动化 NetSuite Restlets。此 Restlet 使用 OAuth 1.0 进行身份验证。除了消费者密钥、消费者秘密、访问令牌和令牌秘密之外,我还需要设置诸如 REALM 之类的高级字段。但我找不到任何方法在 RestAssured 中设置它。
RequestSpecification request = new RequestSpecBuilder()
.addHeader("Content-Type", ContentType.JSON.toString())
.setBaseUri(url).build()
.auth().oauth(
netsuiteConfig.getNetsuiteConsumerKey(),
netsuiteConfig.getNetsuiteConsumerSecret(),
netsuiteConfig.getNetsuiteTokenId(),
netsuiteConfig.getNetsuiteTokenSecret()
);
这是使用 Postman 的 api 调用
解决方案
我正在使用上一个答案中提到的库,但后来我意识到我需要使用不受支持的 PATCH 请求。
我开始使用google oauth 客户端,经过几天的尝试,终于让这个例子工作了:
val signer = OAuthHmacSigner()
signer.clientSharedSecret = CONSUMER_SECRET
signer.tokenSharedSecret = TOKEN_SECRET
val oauthParameters = OAuthParameters()
oauthParameters.consumerKey = CONSUMER_KEY
oauthParameters.token = ACCESS_TOKEN
oauthParameters.signer = signer
val genericUrl = GenericUrl("https://{ACC_ID}.suitetalk.api.netsuite.com/path/to/endpoint")
oauthParameters.version = "1.0"
oauthParameters.computeNonce()
oauthParameters.computeTimestamp()
oauthParameters.computeSignature("GET", genericUrl)
oauthParameters.realm = REALM
val authHeader = oauthParameters.authorizationHeader
RestAssured.with()
.log().all()
.header("Authorization", authHeader)
.urlEncodingEnabled(false)
.request(Method.GET, genericUrl.toString())
.then()
.statusCode(200)
urlEncoding
对于具有已编码查询参数的 url,设置为 false。例如:
{url}/invoice?q=internalid%20IS%2012
我希望它可以帮助将来的人!
推荐阅读
- ios - 试图让 iOS 13 项目与 iOS 12 兼容
- javascript - 反应原生 Firebase 电子邮件验证
- c# - 当我尝试转换此播放器控制器时,它只是重置为原始位置
- reactjs - React:如何链接到不同的组件(在同一页面中打开)
- tensorflow - 计算权重的输出梯度
- regex - Delphi正则表达式中INSIDE LOOKBEHIND内的变量重复?
- uuid - 在 JMeter 中生成长度为 35 个字符的 UUID
- javascript - ESLint yoda 忽略未定义的比较,如 foo === undefined
- javascript - Javascript Canvas 触摸事件
- python - Python SMTPAuthnticationError