Keycloakからユーザーを認証するためにAPIからアクセスしようとしていますが、エラーが発生しました。無効なパラメーター:keycloakページのredirect_uri。マスターとは別に自分の領域を作成しました。 keycloakはhttp上で実行されています。私を助けてください。
私は同じエラーに直面しました。私の場合、問題はValid Redirect URIsが正しくないことでした。これらは私が従った手順です。
管理ユーザーとして最初にkeycloackにログインします。次に、レルムを選択します(おそらく、レルムに自動リダイレクトされます)。次に、以下の画面が表示されます
左パネルからClientsを選択します。次に、アプリ用に設定した関連クライアントを選択します。デフォルトでは、Settingタブになります(選択しない場合)。私のアプリはポート3000で実行されていたため、正しい設定は次のようになります。アプリをlocalhost:3000で実行しているとしましょう。設定は次のようになります。
リダイレクト先のURL(Chrome dev toolsでこのURLを調べる必要がある場合があります)で、レルムをmaster
から作成したものに変更します。 https
を使用してから、redirect_uriもhttp
を使用していることを確認してください。
ステップ1)このドキュメント に従って、MySqlデータベースをセットアップします。 公式ドキュメント も参照する必要がある場合があります。
ステップ2)コマンドupdate REALM set ssl_required = 'NONE' where id = 'master';
を実行します
注:この時点で、技術的にログインできるはずですが、Keycloakのバージョン4.0はリダイレクトuriにhttpsを使用していますが、オフにしただけです。 httpsサポート。 Keycloakがこれを修正するまで、リバースプロキシでこれを回避できます。リバースプロキシは、Javaキーストアを気にせずにSSL/TLS証明書を簡単に作成するために使用するものです。
注2:その後、Keycloakは独自のプロキシを使用してリリースされました。私はまだこれを試していませんが、この時点で、私の指示に従うのをやめて、(keycloak gatekeeper)[ https://www.keycloak.org/downloads.html] をチェックアウトすることをお勧めします。 Keycloak Gatekeeperのセットアップに問題がある場合は、Apacheでリバースプロキシをセットアップするための指示を保持します。
ステップ3)Apacheをインストールします。 Apacheをリバースプロキシとして使用します(NGINXを試しましたが、NGINXにはいくつかの制限がありました)。 yumインストールApache (CentOs 7)、および apt-get install Apache (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を管理ポータルで正しく動作させることはできませんでした。おそらくこれは、私が使用しているKeycloak 4.0のベータ版のバグであった可能性があります。外部リクエストに対してのみSSLレベルを要求するようにSSLレベルを設定できると思われますが、これは機能しないようでした。そのため、ステップ2でhttpsをnoneに設定します。ここからは、引き続きSSHトンネル経由でhttpを使用して管理設定を管理します。
ステップ6)https経由でサイトにアクセスしようとするたびに、httpsにリダイレクトするようにhttp要求を自動強制するHSTSポリシーをトリガーします。 ChromeからHSTSルールをクリアする の手順に従ってください。しばらくの間、httpsバージョンのサイトに再度アクセスしないでください。
ステップ7)Apacheを設定します。最初に httpd.confファイルの場所 を見つけます。 httpd.confファイルには、おそらく別のディレクトリからの設定ファイルが含まれています。私の場合、httpd.confファイルがあるフォルダーの隣にあるconf.d
ディレクトリーにすべての構成ファイルが見つかりました。
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 [email protected]
または PuTTY で設定します。
ポート9905に送信されるすべてのトラフィックは、SSHトンネルを介してサーバーに安全にルーティングされます。サーバーのファイアウォールでポート9905をホワイトリストに登録してください。
動的ポート転送のセットアップが完了したら、ポート9905でSOCKSプロキシを使用するようにブラウザーをセットアップする必要があります。 指示はこちら 。
ステップ10)これで、Keycloak管理者ポータルにログインできるはずです。 Webサイトに接続するには、 http://127.0.0.1 にアクセスします。SOCKSプロキシが管理コンソールに移動します。 SOCKSプロキシはサーバーのリソースを使用するため、完了したらSOCKSプロキシをオフにしてください。オンにするとインターネットの速度が遅くなります。
ステップ11)このすべてを理解するのにどれくらい時間がかかったかを聞かないでください。
Keycloak管理コンソール> SpringBootKeycloak> Cients> login-appページに移動します。ここで、valid-redirect urisセクションに http:// localhost:8080/sso/login を追加します
これは、間接URIの問題の解決に役立ちます
Keycloakコンテキストパスを変更した後にこの問題が発生する場合は、リダイレクトURL設定に追加の変更を加える必要があります。
<web-context>yourchange/auth</web-context>
を<web-context>auth</web-context>
に戻す/auth/admin
)/auth/admin/master/console/*
から/yourchange/auth/admin/master/console/*
に変更します<web-context>yourchange/auth</web-context>
を入力します。Keycloakを再起動し、ログインページ(現在は/yourchange/auth/admin
)に移動します無効なパラメーターに直面しました: http://www.baeldung.com/spring-boot-keycloak で利用可能なスプリングブートとキークロークの例に従うと、redirect_uriの問題が発生します。 keycloakサーバーからクライアントを追加する場合、keycloakサーバーがリダイレクトを実行できるように、そのクライアントのリダイレクトURIを提供する必要があります。同じエラーに何度も直面したとき、keycloakサーバーコンソールから正しいURLをコピーし、有効なリダイレクトURIスペースで提供したところ、うまくいきました!
フロント構成については、keycloak管理コンソールを確認する必要があります。リダイレクトURLおよびWebオリジン用に誤って設定する必要があります。
Keycloak管理コンソールのWebサイトにログインし、レルムとそのクライアントを選択してから、クライアントのすべてのURIにプロトコル、つまりhttp://
などの接頭辞が付いていることを確認します。例はhttp://localhost:8082/*
です
この問題を解決する別の方法は、Keycloakサーバーのコンソール出力を表示し、リクエストが拒否されたことを示す行を見つけ、そこからredirect_uri
表示値をコピーして、クライアントの* Valid Redirect URIs
フィールドに貼り付けることです。 Keycloak管理コンソールのWebサイトで。要求されたURIは受け入れ可能なものの1つです。
このエラーは、ユーザー定義で委任された予期されるロールがない場合にもスローされます(ドロップダウンでレルムのロールを設定します)。
ログアウト後にキークロークログインページにリダイレクトしようとしている場合(私はそうでした)、これはデフォルトでは許可されていませんが、クライアントの管理コンソールの「有効なリダイレクトURI」設定で構成する必要もあります。
認証コードフローを使用している場合、response_type
クエリパラメータはcode
と等しくなければなりません。 https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html を参照してください