web-dev-qa-db-ja.com

プロキシの背後でkeycloakを実行しているときに無効なトークン発行者

キークロークサーバーをApacheプロキシの背後に配置しました。

ProxyRequests On
ProxyVia On
ProxyPreserveHost On
SSLProxyEngine On
SSLProxyCheckPeerCN on
SSLProxyCheckPeerExpire on
<LocationMatch "/auth/">
    ProxyPass http://keycloak:8090/auth/ Keepalive=On
</LocationMatch>
ProxyPassReverse "/auth/" "http://keycloak:8090/auth/"

Javascript側のkeycloakに、認証に/ authを使用するように指示しました。

{
  "realm" : "local",
  "auth-server-url" : "/auth",
  "ssl-required" : "external",
  "resource" : "client-local",
  "public-client" : true
}

なんとかログインできましたが、サーバーリクエストを行った後、フィルター(org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl from keycloak-jaxrs-oath-client-4.0.0.FINAL)例外をスローしています:

WWW-認証:Bearer realm = "local"、error = "invalid_token"、error_description = "無効なトークン発行者。予期される ' http:// keycloak:8090/auth/realms/local 'ですが、 ' http:// localhost/auth/realms/local ' "

私がここで欠けているものは何ですか?リバースプロキシはkeycloakに対して透過的であると予想していました... keycloak管理パネルでも有効な発行者にlocalhostを追加するオプションが見つかりません...

その設定を機能させるにはどうすればよいですか?

7
9ilsdx 9rvj 0lo

プロキシは、X-Forwarded-ForX-Forwarded-ProtoX-Forwarded-Hostなどの転送ヘッダーをプロキシに追加する必要があります。これにより、keycloakがクライアント(リバースプロキシではない)の元のIPを取得できるようになります。これはセキュリティにとって重要です。理由。また、Keycloakは、プロキシの外部に表示されるホスト名を取得できます。これは、無効なトークン発行者の問題に役立ちます。

また、Dockerイメージを使用している場合は、プロキシヘッダーを使用するようにKeycloakを構成する必要があります。これは、環境変数PROXY_ADDRESS_FORWARDING=trueを使用して行います。

ドキュメント[1]を見てください、そこにもっと多くの答えがあります。 [1] https://www.keycloak.org/docs/4.8/server_installation/#_setting-up-a-load-balancer-or-proxy

2
5hizzle