Java 中的 RestAssured OAuth1 身份验证问题(Twitter v2 API)

问题描述 投票:0回答:2

我正在尝试使用 Python 中的 OAuth1 身份验证方法向 Tweeter 发出请求,我设法使用请求库来做到这一点,但在 Java 上我使用放心。以下代码不起作用,它返回 Unauthorized :

 Response response = given()
            .headers(headerEmpty())
            .auth()
            .oauth(twitterSettings.getApiKey(), twitterSettings.getApiKeySecret(),
                    twitterSettings.getAccessToken(), twitterSettings.getAccessTokenSecret())
            .spec(baseUrl)
            .get("users/me")
            .then()
            .extract().response();

我在网上查找,发现我可能需要使用 Scribejava 库,但不确定如何与 Rest Assured 结合使用,我并不懒惰,但有一些帮助。

编辑: 我添加了 Scribe 的依赖项,但仍然不起作用。

public static Headers headerEmpty() {
        Header contentType = new Header("Content-Type", "application/json");
        Header acceptType = new Header("Accept", "*/*");

        List<Header> headerList = new ArrayList<>();
        headerList.add(contentType);
        headerList.add(acceptType);

        return new Headers(headerList);
    } 
java rest-assured scribe api-authorization
2个回答
1
投票

我认为问题是因为缺少标题。 尝试将此标头添加到上面的请求中:

Content-Type: application/x-www-form-urlencoded

为了准确查看您传递的标头,您可以像这样更改代码:

 Response response = given()
            .log().all()
            .header("Content-Type", "application/x-www-form-urlencoded")
            .auth()
            .oauth(twitterSettings.getApiKey(), twitterSettings.getApiKeySecret(),
                    twitterSettings.getAccessToken(), twitterSettings.getAccessTokenSecret())
            .spec(baseUrl)
            .get("users/me")
            .then()
            .extract().response();

0
投票

我在“放心”和 OAuth1 上也遇到了类似的问题。 我用这种方式解决了问题:

String oauthHeader = "OAuth oauth_consumer_key=\"" + consumerKey + "\", "
                + "oauth_token=\"" + accessToken + "\", "
                + "oauth_signature_method=\"PLAINTEXT\", "
                + "oauth_signature=\"" + consumerSecret + "%26" + accessTokenSecret + "\"";

    given()
            .contentType(ContentType.JSON)
            .header("Authorization", oauthHeader)
            .body("xyz")
            .when()
            .get("https://xyz")
            .getBody()
            .prettyPrint();

我在将 PLAINTEXT 设置为签名方法时遇到问题。

© www.soinside.com 2019 - 2024. All rights reserved.