web-dev-qa-db-ja.com

keycloakがリダイレクトURIでSSLを削除するのはなぜですか?

次のような単純な要件があります:[〜#〜 ] ps [〜#〜]:https:/ === https://

ユーザーがhttps:/company_landing.company.comを押すと、keycloakログインページ(https:/ourcompany-keycloak.company)にリダイレクトされます。 com)。ユーザーは自分のkeycloakログイン資格情報を入力します。 keycloakに正常にログインすると、company_landingページに表示されます。

問題は:

ユーザーが入力した場合-https:/company_landing.company.com

Keycloakはランディングページを表示しようとしますが、500 Internal serverエラーが発生し、「Incorrect redirect uri」と表示され、ブラウザに次のように表示されます。

https:/ourcompany-keycloak.company.com/auth/realms/realm1/tokens/login?client_id = company_dev&state = aaaafffff-559d-4312-a8be-123412341234&redirect_uri = http%3A%2F %2Fcompany_landing.company.com%3A8081%2F%3Fauth_callback%3D1

上記のリダイレクトURIを観察すると、問題はhttpsではなくリダイレ​​クトURIがhttpで始まり、http:/company-landing.company.comが存在しないことだと思います。

設定:キークローク設定:-

レルム->設定->ログイン:SSLが必要=すべてのリクエスト(「外部」でも試行)

アプリケーション->レルム1->設定->リダイレクトURI= https://company_landing.company.com/ *

AWSロードバランサー:ポート設定:443(https)8443に転送

なぜSSLを削除しているのか混乱していますか?上記はローカル環境でテストする場合は正常に機能しますが(おそらくその http:// localhost のため)、SSLで暗号化されたリンクにアクセスしようとすると常に無効なリダイレクトURLが返されます。

-んん

11
mmraj

次のプロパティをプロキシ構成jsonファイル(デフォルトではproxy.json)にアプリケーション属性(「adapter-config」と同じレベル)として追加する必要があります。

"proxy-address-forwarding" : true,

この構成属性は文書化されていませんが、プロキシ構成のソースに存在します: https://github.com/keycloak/keycloak/blob/master/proxy/proxy-server/src/main/Java/org /keycloak/proxy/ProxyConfig.Java

6
ths

証明書をインストールしたり、アダプター構成の変更を使用したりする必要はありません。

これは、Keycloakドキュメントのリバースプロキシセクション https://www.keycloak.org/docs/latest/server_installation/index)に記載されているように、standalone.xmlstandalone-ha、またはdomain.xml(場合によっては)で行う必要があります。 html#_setting-up-a-load-balancer-or-proxy

リバースプロキシがSSLにポート8443を使用しないと仮定すると、HTTPSトラフィックがリダイレクトされるポートも構成する必要があります。

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
    ...
    <http-listener name="default" socket-binding="http"
        proxy-address-forwarding="true" redirect-socket="proxy-https"/>
    ...
</subsystem>

Redirect-socket属性をhttp-listener要素に追加します。値はproxy-httpsである必要があります。これは、定義する必要のあるソケットバインディングを指します。

次に、新しいソケットバインディング要素をsocket-binding-group要素に追加します。

<socket-binding-group name="standard-sockets" default-interface="public"
    port-offset="${jboss.socket.binding.port-offset:0}">
    ...
    <socket-binding name="proxy-https" port="443"/>
    ...
</socket-binding-group>
2