【问题标题】:Java Oauth request_token flow example, without librariesJava Oauth request_token 流示例,没有库
【发布时间】:2021-07-07 18:37:00
【问题描述】:

我有这段代码:

String yourUrl = "https://api.discogs.com/oauth/request_token";
        String currentSeconds = String.valueOf(System.currentTimeMillis() / 1000);
        String urlString = yourUrl + "?oauth_consumer_key=BaeIqWMTmCxjeJjwmkJr&oauth_nonce=random_string_or_timestamp&oauth_timestamp="+ currentSeconds + "&oauth_callback=http://localhost:8080&oauth_signature=ZWglyBtJasnJBqVnzyduYJggCduKeYks;

        System.out.println(urlString);

        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("GET");
        conn.setRequestProperty("User-Agent", "test");

        int statusCode = conn.getResponseCode();

但我有这个错误:

Status Code: 401
Invalid signature. Expected signature base string: ZWglyBtJasnJBqVnzyduYJggCduKeYks&

【问题讨论】:

  • 看起来你错过了&在签名末尾签名。
  • 相同的结果在签名末尾添加 &

标签: java rest authentication oauth restful-authentication


【解决方案1】:

根据 discogs oauth 流程,您不应将参数作为请求参数发送,而应将其组合到 Authorization 标头中并执行以下操作:

        String yourUrl = "https://api.discogs.com/oauth/request_token";
        String currentSeconds = String.valueOf(System.currentTimeMillis() / 1000);
        URL url = new URL(yourUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("User-Agent", "test");
        conn.setRequestProperty("Authorization",
            "OAuth oauth_consumer_key=\"BaeIqWMTmCxjeJjwmkJr\"," +
                "oauth_nonce=\"" + System.currentTimeMillis() + "\"," +
                "oauth_signature=\"ZWglyBtJasnJBqVnzyduYJggCduKeYks&\"," +
                "oauth_signature_method=\"PLAINTEXT\"," +
                "oauth_timestamp=\"" + currentSeconds + "\"," +
                "oauth_callback=\"your_callback\""
        );

        int statusCode = conn.getResponseCode();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 2015-09-12
    • 2016-10-29
    • 2013-02-09
    • 2014-12-14
    • 2012-12-23
    • 2013-07-10
    • 2011-09-15
    相关资源
    最近更新 更多