JHipsterのSpring Authなapplicationを httpsのreverse proxy(nginx)の後ろに置いて、 GoogleのOAuth2でJWTな認証をしようとしました。 当然、backend serverからはGoogle APIに自分のhost名でaccessするような URLを返してしまい、Google APIから戻ってきたところでJWT認証は弾かれます。 backend serverはfrontend serverの名前を知らないんですから、 そりゃあ当然です。 こういうreverse proxyの後ろにbackend server置いてOAuth2 + JWTなんて そもそもダメなの? 何とかならないの? と調べてみると、 Spring Boot and OAuth2: redirect url over reverse proxyに、 reverse proxy側でX-Forwarded-Port
とかのproxy用HTTP Response Headerを設定し、 Spring application側でserver.use-forward-headers=true
にすればいいよ、 とあったので、 じゃぁnginxではどうやるのだろうと調べると、 Nginx のリバースプロキシ設定のメモにありました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
この通りやってみると、 何故かGoogle APIにはhttp://proxy-server/...
で渡っており、 じゃぁっていうんでproxy_set_header X-Forwarded-Proto https;
とベタ書きしてみてもダメで、 うーんとか思っていると、 nginx でリバースプロキシするときの Tipsにoff
じゃなくてproxy_redirect http:// https://;
という記述があったので、 試してみると、上手く行きました。 あーちなみに、proxy_set_header X-Forwarded-Proto https;
も ベタ書きじゃないとダメでした。 結局うちの場合は、以下の通りになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
で、sudo /usr/sbin/nginx -s reload
です。
でも、これでGoogle APIから無事戻ってくるようにはなったものの、 その後「No-providerで登録」になってしまい、 まだ完成しません。 ただ、その問題は別のもののようで、一歩は進んだと思うので、記事にしました。
↑その「No-providerで登録」になってしまうのは、 backendで以下のようなerrorが出ていて。
1 2 3 4 5 6 7 8 9 10 11 |
|
何なんでしょうね。 これは、account mail addressが「w.disney@somecompany.co.jp」みたいな 「.」が入るものなんですが、それがいけないとかなのでしょうか。 というのも、フツーの「gepetto@gmail.com」みたいなmail accountなら 全く同じcodeで何の問題もなく入れるのです。 「must match」の対象が何なのか、よく分かりません。