2017-11-23 21 views
1

まだ学習していますが、私は以下のコードからError 401 unauthorizedを取得しています。私はOAuthヘッダがPOSTMANで動作するので、POSTリクエスト/ Authヘッダに問題があると仮定していることを知っていますか?何か案は?OAuth 401 Unauthorized

//set timestamp 
      Long timestamp = System.currentTimeMillis()/1000; 
      //set nonce ***** call from main system************************************************************* 
      String aString = randomAlphaNumeric(11); 
      // other stuff 
      RestTemplate restTemplate = new RestTemplate(); 
      restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
      HttpHeaders headers = new HttpHeaders(); 
      String url = "aURL"; 
      headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 
      // String auth = Base64.getEncoder().encodeToString(credentials.getBytes()); 
      List<NameValuePair> oauthHeaders = new ArrayList<>(9); 
      oauthHeaders.add(new BasicNameValuePair("oauth_consumer_key", "aKey")); 
      oauthHeaders.add(new BasicNameValuePair("oauth_nonce", aString)); 
      oauthHeaders.add(new BasicNameValuePair("oauth_timestamp", String.valueOf(timestamp))); 
      oauthHeaders.add(new BasicNameValuePair("oauth_signature_method", "HMAC-SHA1")); 
      oauthHeaders.add(new BasicNameValuePair("oauth_version", "1.0")); 
      //generate signature 
      //encode 
      String encodedURL = encode(oauthHeaders.toString()); 
      System.out.println("encoded URL:" +encodedURL); 
      //form base string 
      String baseString = "POST&"+encode(url).toString()+encodedURL; 
      System.out.println("Base String: "+baseString); 
      //form signature 
      byte[] byteHMAC = null; 
      try { 

       Mac mac = Mac.getInstance("HmacSHA1"); 
       SecretKeySpec spec; 
       if (null == secretKey) { 
        String signingKey = encode(secretKey) + '&'; 
        spec = new SecretKeySpec(signingKey.getBytes(), "HmacSHA1"); 
       } else { 
        String signingKey = encode(secretKey) + '&' + encode(secretKey); 
        spec = new SecretKeySpec(signingKey.getBytes(), "HmacSHA1"); 
       } 
       mac.init(spec); 
       byteHMAC = mac.doFinal(baseString.getBytes()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      String signature = new BASE64Encoder().encode(byteHMAC); 
      System.out.println("oauth signature: "+signature); 


      //set signature to params 
      oauthHeaders.add(new BasicNameValuePair("oauth_signature", signature)); 
      String test = "OAuth "+oauthHeaders.toString(); 
      headers.set("Authorization", test); 
      MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>(); 
      map.add("Name",name.toString()); 
      map.add("Region",region.toString()); 


      HttpEntity<MultiValueMap<String, String>> requestEntity= new HttpEntity<MultiValueMap<String, String>>(headers, map); 
      System.out.println(requestEntity); 
      ResponseEntity<String> response= restTemplate.exchange(url ,HttpMethod.POST, requestEntity, String.class); 
      System.out.println(response.toString()); 
      HttpStatus status = response.getStatusCode(); 
      status.toString(); 
      if(status.equals("200")){ 
       Notification.show("Employer" + name +" added successfully"); 
      } 
      else{ 
       Notification.show("Unsuccessful, error: "+status); 
      } 


     } 

は明らかな理由からURLとコンシューマキー/署名を削除しました。

次のシステムアウトのプリントにも役立つかもしれない:

エンコードのparamsを: %5Boauth_consumer_key%3aKey%2C%20oauth_nonce%3DWZU8H1B5JA6%2C%20oauth_timestamp%3D1511621759%2C%20oauth_signature_method%3DHMAC-SHA1%2C%の20oauth_version %3D1.0%5D

ベース文字列:POST & HTTPS%3A%2F%2Fapi.test.payrun.io%2FEmployer%5Boauth_consumer_key%3aKey%2C%20oauth_nonce%3DWZU8H1B5JA6%2C%20oauth_timestamp%3D1511621759%2C%20oauth_signature_method %3DHMAC-SHA1%2C%20oauth_version%3D1.0%5D

oauthシグネチャ:DlRJGSzgRIItzz + LzMbgnIfbOqU =

+0

ヘッダー名に 'Authorization'(SではなくZを書き留めてください)を試しましたか? – bouteillebleu

+0

ちょうどそれを変更し、コードを実行しています....まだ401 Unauthorizedを取得しています。 –

答えて

1

oauth_signatureの値が間違っています。 oauth_signatureの値としてasignatureを使用していますが、要求の正しい値を計算してoauth_signatureに設定する必要があります。 oauth_signatureの値が間違っている場合、サーバーは要求を拒否します。詳細は3.4. SignatureRFC 5849(The OAuth 1.0 Protocol)を参照してください。

+0

Oauthシグネチャを修正しましたが、まだ同じエラーが発生していますか? –

関連する問題