apiからヒットしてkeycloakからユーザーを認証しようとしていますが、エラーが発生します無効なパラメーター:keycloakページのredirect_uri。私はマスターとは別に自分の領域を作成しました。keycloakはhttpで実行されています。私を助けてください。
apiからヒットしてkeycloakからユーザーを認証しようとしていますが、エラーが発生します無効なパラメーター:keycloakページのredirect_uri。私はマスターとは別に自分の領域を作成しました。keycloakはhttpで実行されています。私を助けてください。
回答:
.Net Devloperの場合は、以下を確認してください。構成keycloakAuthenticationオプションクラスセットCallbackPath = RedirectUri、//このプロパティを設定する必要があります。そうしないと、無効なリダイレクトエラーが表示されます。
私は同じエラーに直面しました。私の場合、問題は 有効なリダイレクトURIにありましたが正しくないことでした。それで、これらは私が従ったステップです。
管理者ユーザーとしてkeycloackに最初にログインします。次に、レルムを選択します(おそらく、レルムに自動転送されます)。次に、以下の画面が表示されます
左側のパネルから[クライアント]を選択します。次に、アプリ用に構成した関連クライアントを選択します。デフォルトでは、選択しない場合は[設定]タブになります。私のアプリはポート3000で実行されていたので、正しい設定は次のようになります。アプリがlocalhost:3000で実行されているとすると、設定は次のようになります。
リダイレクト先のURLで(このURLについてはChrome開発ツールで確認する必要がある場合があります)、レルムをmaster
作成したばかりのレルムに変更します。を使用していない場合はhttps
、redirect_uriもを使用していることを確認してくださいhttp
。
ステップ1)このドキュメント に従って、MySqlデータベースをセットアップします。また、公式ドキュメントを参照する必要がある場合もあります。
ステップ2)
コマンドを実行しますupdate REALM set ssl_required = 'NONE' where id = 'master';
注: この時点で、技術的にはログインできるはずですが、バージョン4.0のKeycloakは、httpsサポートをオフにしただけでも、リダイレクトURIにhttpsを使用しています。Keycloakがこれを修正するまで、リバースプロキシでこれを回避できます。リバースプロキシは、Javaキーストアを気にすることなくSSL / TLS証明書を簡単に作成するためにとにかく使用したいものです。
注2: Keycloakはそれ以来独自のプロキシを備えています。私はまだこれを試していませんが、この時点で、私の指示に従うのをやめて、(keycloakゲートキーパー)[ https://www.keycloak.org/downloads.html]をチェックアウトすることをお勧めします。Keycloak Gatekeeperの設定で問題が発生した場合は、Apacheでリバースプロキシを設定するための手順を説明します。
ステップ3) Apacheをインストールします。Apacheをリバースプロキシとして使用します(NGINXを試しましたが、NGINXにはいくつかの制限がありました)。参照してください。Apacheのインストールyumを(CentOSの7)、およびApacheのインストールapt-getを(Ubuntuの16)、または特定のディストリビューションのための命令を見つけます。
ステップ4) Apacheを実行する
sudo systemctl start httpd
(CentOs)またはsudo systemctl start apache2
(Ubuntu)を使用する
使用sudo systemctl status httpd
(CentOSの)またはsudo systemctl status apache2
(Ubuntuの)Apacheが動作しているかどうかを確認します。緑色のテキストで単語が表示されているactive (running)
場合、または最後のエントリが読み取られStarted The Apache HTTP Server.
ている場合は、問題ありません。
ステップ5)リバースプロキシとのSSL接続を確立し、リバースプロキシはhttp経由でkeyCloakと通信します。このhttp通信は同じマシンで行われているため、安全です。Certbotを使用して、自動更新証明書を設定できます。
このタイプの暗号化では不十分であり、セキュリティポリシーでエンドツーエンドの暗号化が必要な場合は、リバースプロキシを使用する代わりに、WildFlyを介してSSLを設定する方法を理解する必要があります。
注: 実際にhttpsを管理ポータルで正しく機能させることはできませんでした。おそらく、これは私が使用しているKeycloak4.0のベータ版のバグであった可能性があります。外部リクエストにのみSSLレベルを要求するように設定できると思われますが、これは機能していないようです。そのため、手順2でhttpsをnoneに設定しました。これ以降、管理者設定を管理するためにSSHトンネルを介してhttpを引き続き使用します。
ステップ6) https経由でサイトにアクセスしようとすると、HSTSポリシーがトリガーされ、httpリクエストがhttpsにリダイレクトされるように自動強制されます。次の手順に従ってChromeからHSTSルールをクリアしてから、当面の間、httpsバージョンのサイトに再度アクセスしないでください。
ステップ7)
Apacheを設定します。まず、httpd.confファイルの場所を見つけます。httpd.confファイルには、おそらく別のディレクトリの設定ファイルが含まれています。私の場合、すべての設定ファイルがconf.d
httpd.confファイルがあったフォルダーの隣ディレクトリにた。
confファイルを見つけたら、confファイルに次の仮想ホストエントリを変更または追加します。certbotによって生成された既存のSSLオプションをオーバーライドしないようにしてください。完了すると、構成ファイルは次のようになります。
<VirtualHost *:80>
RewriteEngine on
#change https redirect_uri parameters to http
RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
RewriteRule . %1redirect_uri=http%2 [NE,R=302]
#uncomment to force https
#does not currently work
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}
#forward the requests on to keycloak
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
RewriteEngine on
#Disable HSTS
Header set Strict-Transport-Security "max-age=0; includeSubDomains;" env=HTTPS
#change https redirect_uri parameters to http
RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
RewriteRule . %1redirect_uri=http%2 [NE,R=302]
#forward the requests on to keycloak
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
#Leave the items added by certbot alone
#There should be a ServerName option
#And a bunch of options to configure the location of the SSL cert files
#Along with an option to include an additional config file
</VirtualHost>
</IfModule>
ステップ8) Apacheを再起動します。使用sudo systemctl restart httpd
(CentOSの)またはsudo systemctl restart apache2
(Ubuntuの)。
ステップ9) サーバーへのログインを試みる前に、Keycloakにhttpを使用するように指示したため、安全に接続する別の方法を設定する必要があります。これは、キークロークサーバーにVPNサービスをインストールするか、SOCKSを使用して実行できます。SOCKSプロキシを使用しました。これを行うには、最初に動的ポート転送を設定する必要があります。
ssh -N -D 9905 user@example.com
または、Puttyを介して設定します。
これで、ポート9905に送信されたすべてのトラフィックが、SSHトンネルを介してサーバーに安全にルーティングされます。サーバーのファイアウォールでポート9905をホワイトリストに登録してください。
動的ポート転送を設定したら、ポート9905でSOCKSプロキシを使用するようにブラウザを設定する必要があります。手順はこちら。
ステップ10)これでKeycloak管理ポータルにログインできるようになります。Webサイトに接続するには、http://127.0.0.1にアクセスすると、SOCKSプロキシによって管理コンソールに移動します。サーバーのリソースを利用するため、完了したら必ずSOCKSプロキシをオフにしてください。オンのままにすると、インターネット速度が低下します。
ステップ11)これらすべてを理解するのにどれくらいの時間がかかったか私に聞かないでください。
keycloak管理コンソール> SpringBootKeycloak> Cients> login-appページに移動します。ここでvalid-redirecturisセクションにhttp:// localhost:8080 / sso / loginを追加し ます
これは、間接URIの問題を解決するのに役立ちます
web-context
設定を変更した後、この問題が発生しました
Keycloakコンテキストパスに変更を加えた後にこの問題が発生した場合は、リダイレクトURL設定に追加の変更を加える必要があります。
<web-context>yourchange/auth</web-context>
にバック
<web-context>auth</web-context>
でstandalone.xml/auth/admin
)/auth/admin/master/console/*
に
変更します/yourchange/auth/admin/master/console/*
<web-context>yourchange/auth</web-context>
standalone.xmlに元の変更を入れます
。Keycloakを再起動し、ログインページ(現在は/yourchange/auth/admin
)に移動します。
redirect_uris
DBのテーブルを編集して、値フィールドを調整することもできます
Keycloak管理コンソールのWebサイトにログインし、レルムとそのクライアントを選択してから、クライアントのすべてのURIの前にプロトコルが付いていることを確認しますhttp://
。例はhttp://localhost:8082/*
この問題を解決するもう1つの方法は、Keycloakサーバーコンソールの出力を表示し、リクエストが拒否されたことを示す行を見つけて、redirect_uri
表示された値をコピー* Valid Redirect URIs
し、Keycloak管理コンソールWebサイトのクライアントのフィールドに貼り付けることです。その場合、要求されたURIは許容範囲の1つです。
http://www.baeldung.com/spring-boot-keycloakで入手可能なSpringBootとKeycloakの例に従って、無効なパラメーター:redirect_uriの問題の問題に直面しました。キークロークサーバーからクライアントを追加するときは、キークロークサーバーがリダイレクトを実行できるように、そのクライアントのリダイレクトURIを提供する必要があります。同じエラーに何度も直面したとき、keycloakサーバーコンソールから正しいURLをコピーし、有効なリダイレクトURIスペースに提供したところ、正常に機能しました。
私も同じ問題に直面しました。レルムの下の特定のクライアントにそれぞれ移動して、完全なURLの後にURL add *をリダイレクトすることで修正しました。
問題は解決されます
例: リダイレクトURI:http:localhost:3000 / myapp / generator / *
私は同じ問題に直面しました。レルムの下の特定のクライアントにそれぞれ移動して、完全なURLの後にURL add *をリダイレクトすることで修正しました。
認証コードフローを使用している場合、response_type
クエリパラメータはに等しくなければなりませんcode
。https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.htmlを参照してください
ログアウト後にkeycloakログインページにリダイレクトしようとしている場合(私がそうであったように)、これはデフォルトでは許可されていませんが、クライアントの管理コンソールの[有効なリダイレクトURI]設定で構成する必要もあります。
使用しているクライアントのredirect_uriパラメーターの値がホワイトリストに登録されていることを確認してください。管理コンソールを介してクライアントの構成を管理できます。
リダイレクトURIは、ホワイトリストに登録されたリダイレクトURIの1つと完全に一致する必要があります。または、ホワイトリストに登録するURIの最後にワイルドカードを使用できます。参照:https://www.keycloak.org/docs/latest/server_admin/#_clients
ワイルドカードを使用してリダイレクトURIをホワイトリストに登録することは、Keycloakで許可されていますが、実際にはOpenIdConnect仕様に違反していることに注意してください。https://lists.jboss.org/pipermail/keycloak-dev/2018-December/011440.htmlでこれに関する議論を参照してください
レルム名に空白を入れると、この問題が発生する可能性があるようです。名前をに設定しましたがDebugging Realm
、このエラーが発生しました。私がDebuggingRealm
それに変更したとき、それはうまくいきました。
表示名には空白を含めることができます。keycloakが管理者入力でこれをチェックしないのは奇妙なことです。