【问题标题】:Authorization header OAuth1 towards REST Web Service面向 REST Web 服务的授权标头 OAuth1
【发布时间】:2019-07-08 06:22:24
【问题描述】:

我正在尝试使用 HttpURLConnection 调用 rest web 服务。我想添加授权标头 OAuth1。我总是收到 401 响应。

我已经通过 SOAPUI 或 POSTMAN 成功使用了这个 ws。 我构建的授权字符串需要编码吗?

String oautStr = "OAuth oauth_consumer_key=\"1234\",oauth_token=\"1dw3\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1562334372\",oauth_nonce=\"wf4ffr\",oauth_version=\"1.0\",oauth_signature=\"34r4ff\"";

URL url = new URL(urlStr);  

HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
            con.setRequestProperty("Authorization", oautStr);   
            con.setRequestProperty("Content-Type", "application/json");
            con.setRequestProperty("Accept", "application/json");
            con.setRequestMethod("POST");
            con.setDoOutput(true);

            OutputStream os = con.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");    
            osw.write("{\"user\":\"1203\",\"name\":\"test\",,\"test\":{}}");
            //System.out.println(con.getRequestProperty("Authorization"));
            osw.flush();
            osw.close();
            os.close();

【问题讨论】:

  • 我已经通过我的java客户端成功使用了ws。但是,我确实复制了 POSTMAN 中生成的授权标头内容。我认为问题在于签署我的请求以生成对 WS 的有效请求。有人知道程序吗?如果我没记错的话,我会使用密钥(应用程序和令牌密钥)来签署基本字符串。我找到了本指南oauth1.wp-api.org/docs/basics/Signing.html,但没有 java 示例可以帮助我

标签: java http


【解决方案1】:

HTTP 401 响应意味着未经授权/需要授权。

请求未被应用,因为它缺少目标资源的有效身份验证凭据。

您可以在link 找到一些解决方法的建议。

【讨论】:

  • 感谢巴特的快速回复。我理解 401 消息。我只是不知道为什么我得到它。它更像是一个编码问题,因为我已经通过 Postman 成功使用了这个 Web 服务。
【解决方案2】:

我发现自己很难签署我的请求。 我确实使用过路标库,您可以在其中使用 3 行代码进行签名。

如果有人感兴趣

   OAuthConsumer consumer = new DefaultOAuthConsumer(oauth_consumer_key,consumSecret);
   consumer.setTokenWithSecret(oauth_token, tokenSecret);
   consumer.sign(con);

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 2014-05-22
    • 1970-01-01
    • 2016-12-09
    • 2016-04-28
    • 2020-12-06
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    相关资源
    最近更新 更多