OAuth のエラー oauth_problem=signature_invalid
プラットフォームについて: 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 は除く
問題
アプリケーション リンクの作成時や、アプリケーション リンクを使用する機能の利用時に、アプリケーション同士での認証に失敗する。
アプリケーション ログに次のエラーが記録される。
oauth_problem=signature_invalid
診断
環境
- 2 つのアプリケーションがアプリケーション リンクを使って接続されている
- 認証方式として OAuth が使われている
原因
リンクのアプリケーション URL がリモート アプリケーションが報告している URL に一致しません。これには次のような原因が考えられます。
- リモート アプリケーションのベース URL が、リンクで定義されているアプリケーション URL とは異なるものに設定されている
- リバース プロキシまたはポート フォワーディングが構成されていて、Host ヘッダーが誤ったホスト名またはポートを報告している
- CDN またはファイアウォールによってリクエストから GET パラメーターが取り除かれている
- リバース プロキシとして NGINX を利用していて
proxy_cache
ディレクティブを使っている場合 <confluence-install>/conf/server.xml
の useBodyEncodingForURI Tomcat パラメーターが true に設定されている
このシナリオの場合、影響を受けるアプリケーションではほかの問題も表示されることが多いです。
ソリューション
ベース URL
- 各アプリケーションでベース URL が適切であることを確認します。
アプリケーション URL
リバース プロキシをバイパスしている場合を除き、アプリケーション URL はもう片方のアプリケーションのベース URL に一致する必要があります。
アプリケーション URL がベース URL に一致せず、リバース プロキシのバイパスも行っていない場合は、アプリケーション リンクを削除して再作成します。
リバース プロキシ
リバース プロキシまたはポートフォワーディングを使用している場合、アプリケーションがリバース プロキシを使用するために適切に構成されていることを確認します。
GET パラメーターの削除
- CDN またはファイアウォールのルールによってリクエストからパラメーターが削除されていないことを確認します。リクエスト パラメーターは変更されるべきではありません。
proxy_cache
ディレクティブを利用している NGINX のリバース プロキシ
NGINX のキャッシュはデフォルトで HEAD リクエストを GET リクエストに書き換えますが、これはアトラシアン アプリケーション間のアプリケーション リンクの通信に干渉します。
- 回避策 1: Nginx 構成で
proxy_cache
ディレクティブを使わない 回避策 2:
proxy_cache
ディレクティブが必須である場合は次の情報を NGINX 構成に追加し、OAuth 通信を破壊することなくキャッシュを引き続き有効化できるようにします。proxy_cache_convert_head off; proxy_cache_key $scheme$request_method$proxy_host$request_uri;
Tomcat
<Confluence のインストール ディレクトリ>/conf/server.xml で次の部分を探します。
<Connector port="8090" connectionTimeout="20000" redirectPort="8443" maxThreads="48" minSpareThreads="10" enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8" protocol="org.apache.coyote.http11.Http11NioProtocol" useBodyEncodingForURI="true"/>
server.xml に useBodyEncodingForURI が存在する場合、そのパラメーターを削除するか false に設定します。
<Connector port="8090" connectionTimeout="20000" redirectPort="8443" maxThreads="48" minSpareThreads="10" enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8" protocol="org.apache.coyote.http11.Http11NioProtocol" useBodyEncodingForURI="false"/>