首页 > 解决方案 > 如何在 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 调用

标签: javaoauthrest-assured

解决方案


我正在使用上一个答案中提到的库,但后来我意识到我需要使用不受支持的 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

我希望它可以帮助将来的人!


推荐阅读