2017-08-15 13 views
0

Javaアプリケーションからトークンベースの認証を使用するいくつかのRESTful Webサービスにアクセスする必要があります。私が理解しているように、この目的のための最善の選択はジャージーのようなJAX-RSベースのライブラリを使用することですが、私はこの点で非常に新しいです。おそらく誰かが、Webサービスからトークンを取得するための適切なリクエストのサンプルコードを与えることによって私を助けることができました。Webサービスからトークンを取得するJava POSTリクエスト

我々が持っているもの:トークン発行サーバの

  • URI。 oAuth2認証を使用します。
  • clientIdとclientSecretそれを検証してトークンを返すトークン発行サーバーにそれらを提出する必要があります。
  • Webサービス自体のURI。
  • サービスアクセスのためのユーザー名とパスワード。

私が理解できるように、私は以下のヘッダと一緒にPOSTリクエストを送信する必要がトークンを取得するには:

  • "認可" は、 "基本的な YWRhMGI3NTicdscsN2I0MjNjM2EwNWQ0MjM2ZTg6QU1hS0ltUEZJaUFSR3dGMmJ3NjZZVi9Ec05YZTd0ZkEerfrvegezNoND0は="( "基本" + Base64エンコード」 clientId:clientSecret」)
  • ""、 "アプリケーション/ x-www-form-urlencodedで"
  • "コンテンツタイプ"、 "アプリケーション/ JSONを受け入れ、ODATA =冗長"

と、次のパラメータ:

grant_type =パスワード&ユーザ名= someusername &パスワード= somepassword &範囲=プロファイル

ホープ誰かが例のコードで私を助けます。

答えて

0

いくつかのポイント:指定

  • URLリクエストはリソース所有者のパスワードの資格に属する1つであるを付与します。この補助金が意味するシナリオの下にいることを確認してください(詳細はhere)。
  • JAX-RSは、クライアント側の呼び出しではなく、REST APIを実装しています(おそらく "jax-rs client"について話していたでしょうか?そうだとすれば、oauthの点では、他のhttpクライアントと同じように)。
  • アクセストークンの取得を処理できるライブラリがあります。そのため、プロパティを提供し、結果として得られるトークンの処理方法を決定するだけです。たとえば、春を使用している場合は、Spring Security OAuth2(「クライアントロール」構成についてのみ説明しますが、外部認証サーバーを使用します)。
  • これらのライブラリがあなたのケースに合っていない場合:httpクライアントを実装/使用して、その承認サーバーへの標準呼び出しを行うだけです(これらは単にREST APIです)。いくつかのオプション:apacheのhttpcomponents春RestTemplateJDKのHttpURLConnectionは
+0

も[JAX-RXクライアントAPI]があります(https://docs.oracle.com/javaee/7/tutorial/jaxrs-client.htm)(主にするためのものが、RESTに限定されません)いくつかの混乱を加えたかもしれない。 – toKrause

+0

あなたは正しいthnxですが、混乱を避けるために回答を編集します(いずれにしても、OPはクライアントのアフリカではなく、サービスの実装に関連するジャージについて話しました)。 IMHO jax-rsクライアントは、ドキュメンテーション自体に、クライアントがjaxrsサービス用ではなく、代わりにRESTサービス用であることを考慮して、ひどい名前です。p –

+0

ジャージーはJAX-RS実装'jersey-client'という名前のコンポーネントにJAX-RSクライアントAPIも実装しています。 – toKrause

0

解決します!

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public void getHttpCon() throws Exception{ 

    String POST_PARAMS = "grant_type=password&username=someusrname&password=somepswd&scope=profile"; 
    URL obj = new URL("http://someIP/oauth/token"); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
    con.setRequestMethod("POST"); 
      con.setRequestProperty("Content-Type", "application/json;odata=verbose"); 
    con.setRequestProperty("Authorization", 
      "Basic Base64_encoded_clientId:clientSecret"); 
    con.setRequestProperty("Accept", 
      "application/x-www-form-urlencoded"); 

    // For POST only - START 
    con.setDoOutput(true); 
    OutputStream os = con.getOutputStream(); 
    os.write(POST_PARAMS.getBytes()); 
    os.flush(); 
    os.close(); 
    // For POST only - END 

    int responseCode = con.getResponseCode(); 
    System.out.println("POST Response Code :: " + responseCode); 

    if (responseCode == HttpURLConnection.HTTP_OK) { //success 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       con.getInputStream())); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 

     // print result 
     System.out.println(response.toString()); 
    } else { 
     System.out.println("POST request not worked"); 
    } 
}  
関連する問題