ローカルのリバース プロキシからのセッションが DefaultRememberMeService に却下される
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
要約
Bitbucket Server は、ユーザー セッションを記憶し、同じ IP アドレスからユーザー セッションを受け取ったときに再認証を要求しないように構成できます。リバース プロキシが含まれる場合、アドレスがクライアントとプロキシの IP に一致する必要があります。これは、クライアントの IP とプロキシの IP が一貫している限りは動作します。ホスト名の解決を受け、プロキシで別の IP を利用した転送が行われる可能性があります。プロキシの IP が変更されると、セッションは却下されます。これは期待された動作です。
診断
$BITBUCKET_HOME/log/atlassian-bitbucket.log
で次のログ メッセージが確認できます。
2021-04-05 22:32:24,357 INFO http-nio-7990-exec-385 192.168.10.32,0:0:0:0:0:0:0:1 "GET /projects/PROJ1/repos/REPO/browse HTTP/1.0" c.a.s.i.a.DefaultRememberMeService Remember-me token detected for series '8fae4af1c41335e0bb51c03bebb24a0b3ce7e6d1' for user 'username' (used from '192.168.10.32,127.0.0.1'). Current request is from a different address ('192.168.10.32,0:0:0:0:0:0:0:1')! As a safety precaution, all (3) tokens from that series have been canceled.
クライアント IP は同じですが、転送されたプロキシ IP が 127.0.0.1 または 0:0:0:0:0:0:0:1 である点をご確認ください。
原因
IPv4 アドレス 127.0.0.1 と IPv6 アドレス 0:0:0:0:0:0:0:1 の両方が localhost を参照するため、Bitbucket によってセッションが却下されるのは望ましくありません。リバース プロキシでは localhost 用に 1 つのアドレスのみが使われるのが理想的です。
このインスタンスでは、リバース プロキシである nginx はローカルにインストールされており、トラフィックをポート 7990 にリダイレクトするよう構成されています。
proxy_pass http://localhost:7990;
/etc/host には localhost の定義が複数含まれ、localhost の候補のアドレスが複数存在するのはこのためです。
127.0.0.1 localhost
::1 localhost
ソリューション
もっとも簡単な修正は、ローカルのリバース プロキシが同じ IP アドレスを利用した転送を行うことです。例:
proxy_pass http://127.0.0.1:7990;