【问题标题】:set the (OAuth token) Authorization Header on SpringBoot在 Spring Boot 中设置(OAuth 令牌)授权标头
【发布时间】:2021-06-20 07:47:16
【问题描述】:

我必须发送一个获取请求来请求带有这些标头的令牌 URL:

Content-Type: application/x-www-form-urlencoded
Authorization:
        OAuth oauth_consumer_key="your_consumer_key",
        oauth_nonce="random_string_or_timestamp",
        oauth_signature="your_consumer_secret&",
        oauth_signature_method="PLAINTEXT",
        oauth_timestamp="current_timestamp",
        oauth_callback="your_callback"
User-Agent: some_user_agent

我试过这段代码:

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("GET");

        conn.setRequestProperty("Authorization: OAuth oauth_consumer_key", "BaeUqWMTmCxjeJj9mkJr");
        conn.setRequestProperty("Authorization: oauth_nonce", "random_string_or_timestamp");
        conn.setRequestProperty("Authorization: oauth_signature", "ZWglyBtJasnJBqVndzyduYJggCduKeYks&");
        conn.setRequestProperty("Authorization: oauth_timestamp", String.valueOf(new Date()));
        conn.setRequestProperty("Authorization: oauth_callback", "http://localhost:8080");
        conn.setRequestProperty("User-Agent", "test");

        int statusCode = conn.getResponseCode();
        System.out.println("Response from WA Gateway: \n");
        System.out.println("Status Code: " + statusCode);
        BufferedReader br = new BufferedReader(new InputStreamReader(
                (statusCode == 200) ? conn.getInputStream() : conn.getErrorStream()
        ));
        String output;
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }
        conn.disconnect();

但我收到此错误:

Illegal character(s) in message header field: Authorization: OAuth oauth_consumer_key

【问题讨论】:

    标签: java spring spring-boot oauth


    【解决方案1】:

    问题是您没有正确地形成您的请求。由于它是 OAuth 请求的GET 版本,这里有一个来自RFC5849 的示例,说明如何执行此操作

    GET /example/path?oauth_consumer_key=0685bd9184jfhq22& oauth_token=ad180jjd733klru7&oauth_signature_method=HM AC-SHA1&oauth_signature=wOJIO9A2W5mFwDgiDvZbTSMK%2FPY% 3D&oauth_timestamp=137131200&oauth_nonce=4572616e48616 d6d65724c61686176&oauth_version=1.0 HTTP/1.1

    Sp,按照上述格式在setRequestProperty 中设置Authorization 标头:

    ...
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    String yourUrl = "http://yourwebsite.com";
    String currentSeconds = 1618496867; // current seconds
    String authorizationValue = "OAuth oauth_consumer_key=\"BaeUqWMTmCxjeJj9mkJr\",
        oauth_nonce=\"1618496867\",
        oauth_signature=\"ZWglyBtJasnJBqVndzyduYJggCduKeYks&\",
        oauth_signature_method=\"PLAINTEXT\",
        oauth_timestamp=\"1618496867\",
        oauth_callback=\"http://localhost:8080\""
    
    conn.setRequestProperty("Authorization", authorizationValue);
    conn.setDoOutput(true);
    conn.setRequestMethod("GET");
    ...
    

    我使用 Postman 客户端为我的 OAuth 身份验证服务器测试了一个类似的请求,它运行良好。

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-07
        • 2016-09-06
        • 2013-01-21
        • 1970-01-01
        • 1970-01-01
        • 2015-05-26
        • 2020-12-05
        • 1970-01-01
        相关资源
        最近更新 更多