キークロークサーバーを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を追加するオプションが見つかりません...
その設定を機能させるにはどうすればよいですか?
プロキシは、X-Forwarded-For
、X-Forwarded-Proto
、X-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