

heroku上にLineアプリケーションを構築しております。  
その際に、Line APIへアクセスするためのIPを固定するためFixieをAddonとして登録しました。

ただ、Lineアプリケーションの動作にあたってFixieから提供されたIPアドレスが使用されず  
Line APIにアクセスできません。

Proxyを使用するにあたって、下記のコードで何が問題なのかご教示ください。  
内容としてはユーザの発言に対して、ユーザーIDの文字列を返すプログラムです。

ちなみに、Fixieから提供されたIPアドレスはポート24でLine developersのServer IP Whitelistに登録済みです。  
また、一時的にServer IP WhitelistへherokuのIPアドレスを追加した場合は正常に動作するため、Proxy設定以外に問題はない認識です。

[code]

    @SpringBootApplication
    @LineMessageHandler
    public class DemoApplication{
    
        public static void main(String[] args) throws IOException {
    
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @Autowired
        private LineMessagingService lineMessagingService;
    
        @EventMapping
        public void handleTextMessageEvent(MessageEvent<TextMessageContent> event) throws Exception {
    
            String channelTtoken = System.getenv("LINE_BOT_CHANNEL_TOKEN");
            String fixieUrl = System.getenv("FIXIE_URL");
            String[] fixieValues = fixieUrl.split("[/(:\\/@)/]+");
            String fixieUser = fixieValues[1];
            String fixiePassword = fixieValues[2];
            String fixieHost = fixieValues[3];
            int fixiePort = Integer.parseInt(fixieValues[4]);
    
            OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
            Authenticator proxyAuthenticator = new Authenticator() {
                @Override public Request authenticate(Route route, Response response) throws IOException {
                    String credential = Credentials.basic(fixieUser, fixiePassword);
                    return response.request().newBuilder()
                            .header("Proxy-Authorization", credential)
                            .build();
                }
            };
    
            Proxy prx = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(fixieHost, fixiePort));
            clientBuilder.proxy(prx).proxyAuthenticator(proxyAuthenticator);
    
            ReplyMessage replyMessage = new ReplyMessage(event.getReplyToken(),
                    Collections.singletonList(new TextMessage(event.getSource().getUserId())));
    
            retrofit2.Response<BotApiResponse> response =
                    LineMessagingServiceBuilder
                            .create(channelTtoken)
                            .okHttpClientBuilder(clientBuilder)
                            .build()
                            .replyMessage(replyMessage)
                            .execute();
            System.out.println("response: " + response.code() + " " + response.message());
    
            final BotApiResponse apiResponse = lineMessagingService
                    .replyMessage(new ReplyMessage(event.getReplyToken(),
                            Collections.singletonList(new TextMessage(event.getSource().getUserId()))))
                    .execute().body();
            System.out.println("Sent messages: " + apiResponse);
        }
    
        @EventMapping
        public void defaultMessageEvent(Event event) {
            System.out.println("event: " + event);
        }
    
    }
    
[/code]

エラーメッセージは大量に出力されました。問題のエラーメッセージは以下だと思っています。

> 2017-07-27T15:24:31.472775+00:00 app[web.1]: 2017-07-27 15:24:31.472 INFO 4
> --- [nio-6512-exec-5] com.linecorp.bot.client.wire : {"message":"Access to
> this API denied due to the following reason: Your ip address
> [54.211.114.123] is not allowed to access this API. Please add your IP to
> the IP whitelist in the developer center."}

以上、よろしくお願いいたします。


CC BY-SA 3.0
2017-07-27T15:54:59.133
36733
2017-07-31T17:35:00.273
2017-07-27T22:37:16.253
21092
24609
question
java heroku spring-boot
heroku,Fixieを使用したLineアプリケーションのプロキシ設定


<http://www.cotegg.com/blog/?p=436>

コールバックURLの登録が必要なのでわ？


CC BY-SA 3.0
2017-07-31T17:35:00.273
36830
2017-07-31T17:35:00.273
24672
36733
answer