web-dev-qa-db-ja.com

Spring Bootと@FeignClientを使用してベアラー認証トークンを送信する方法

Spring Bootを使用して、HTTP RESTサーバーと対話するアプリケーションを作成しています。私が接続しているサーバーの1つ(Wit.ai)は、ビーラー認証トークンを使用しています。正常な応答を生成するカールリクエストは次のようになります。

GET /message?q=sample message HTTP/1.1
Host: api.wit.ai
Authorization: Bearer XXXXXXXXXXXXX
Cache-Control: no-cache
Postman-Token: 526c3a11-8e61-4552-aa19-e913f6473753

Wit.aiのドキュメントでは、トークンについて次のように述べています。

Wit.aiはOAuth2を認証レイヤーとして使用します。そのため、すべてのAPIリクエストには、トークン付きのAuthorize HTTPヘッダーが含まれている必要があります。アクセストークンはアプリ固有です。

@FeignClientを使用して、Spring BootアプリでこのエンドポイントにGETリクエストを送信しようとしています。しかし、私はエンドポイントが私の認証トークンを受け入れていないようです。これが私のFeignClientコードです

@FeignClient(name="witGetter", url = "${wit.url}")
    public interface WitGetter {
        @RequestMapping(method = RequestMethod.GET, value = "/message?v=20180507q={text}",
            headers = {"Authorization: Bearer XXXXXXXXXXXXX"})
        WitResponse getWitResponse(@PathVariable("text") final String text);
}

そのような認証トークンを渡す適切な方法は何ですか?他にもいくつか試しましたが、役に立ちませんでした。アドバイスありがとうございます!!!

ちなみに、次のコードは従来のFeignインターフェースを使用して動作しますが、この場合は@FeignClientを使用する必要があります。

public interface WitGetter {
    @Headers("Authorization: Bearer XXXXXXXXXXXXX")
    @RequestLine("GET /message?q={text}")
    WitResponse getWitResponse(@Param("text") String text);
}

(以下のコードは別の設定ファイルにあります)

@Bean
    public WitGetter defaultWitGetter(@Value("https://api.wit.ai") final String witUrl){
        return Feign.builder().decoder(new GsonDecoder()).target(WitGetter.class, witUrl);

}

[〜#〜]編集[〜#〜]

上記のコードを使用したときに表示されるエラーコードは次のとおりです。

スレッド "main"の例外feign.FeignException:WitGetter#getWitResponse(String、String);を読み取るステータス400。 content:{"error": "Bad auth、check token/params"、 "code": "no-auth"}

6
Trey Bernstien

Spring Cloud経由でFeignを使用する場合は、標準のSpring MVCコントローラーを定義する場合と同じように使用できます。

Feignでヘッダーを渡すことについての私の記事をここでチェックしてください: http://blog.arnoldgalovics.com/2018/02/15/passing-headers-with-spring-cloud-feign/

クイックヒント:@RequestHeader("Authorization") String bearerTokenパラメータをメソッド定義に追加できます。

そしてもちろんclient.method(..., "Bearer " + token)のように呼び出します

12
galovics