web-dev-qa-db-ja.com

keycloak無効なパラメーター:redirect_uri

Keycloakからユーザーを認証するためにAPIからアクセスしようとしていますが、エラーが発生しました。無効なパラメーター:keycloakページのredirect_uri。マスターとは別に自分の領域を作成しました。 keycloakはhttp上で実行されています。私を助けてください。

38
VIJAY THAKUR

私のために働いたのはwildchar '*'を追加することでした実動ビルドの場合、このフィールドの値をより具体的にします。しかし、開発目的のためにこれを行うことができます。

enter image description here

keycloak admin console-> Realm_Name-> Cients-> Client_Nameで使用可能な設定。

編集:本番ビルドには上記のソリューションをお勧めしません。これはセキュリティの欠陥につながる可能性があるためです。

27
tryingToLearn

私は同じエラーに直面しました。私の場合、問題はValid Redirect URIsが正しくないことでした。これらは私が従った手順です。

管理ユーザーとして最初にkeycloackにログインします。次に、レルムを選択します(おそらく、レルムに自動リダイレクトされます)。次に、以下の画面が表示されます

enter image description here

左パネルからClientsを選択します。次に、アプリ用に設定した関連クライアントを選択します。デフォルトでは、Settingタブになります(選択しない場合)。私のアプリはポート3000で実行されていたため、正しい設定は次のようになります。アプリをlocalhost:3000で実行しているとしましょう。設定は次のようになります。

enter image description here

15
Menuka Ishan

作成した新しいレルムが原因でこのエラーが発生する場合

リダイレクト先のURL(Chrome dev toolsでこのURLを調べる必要がある場合があります)で、レルムをmasterから作成したものに変更します。 httpsを使用してから、redirect_uriもhttpを使用していることを確認してください。

パブリックドメイン(localhostではない)でKeycloakをセットアップしようとしているためにこのエラーが発生する場合

ステップ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)このすべてを理解するのにどれくらい時間がかかったかを聞かないでください。

11
Mr. Me

Keycloak管理コンソール> SpringBootKeycloak> Cients> login-appページに移動します。ここで、valid-redirect urisセクションに http:// localhost:8080/sso/login を追加します

これは、間接URIの問題の解決に役立ちます

8
sushilshimpi

Keycloakコンテキストパスを変更した後にこの問題が発生する場合は、リダイレクトURL設定に追加の変更を加える必要があります。

  1. Standalone.xmlで<web-context>yourchange/auth</web-context><web-context>auth</web-context>に戻す
  2. Keycloakを再起動し、ログインページに移動します(/auth/admin
  3. ログインして「マスター」レルムを選択します
  4. サイドメニューから「クライアント」を選択します
  5. 表示されるリストから「security-admin-console」クライアントを選択します
  6. 「有効なリダイレクトURI」を/auth/admin/master/console/*から/yourchange/auth/admin/master/console/*に変更します
  7. 保存してログアウトします。ログアウトすると、再び「無効なリダイレクトURL」メッセージが表示されます。
  8. 次に、standalone.xmlに元の変更<web-context>yourchange/auth</web-context>を入力します。Keycloakを再起動し、ログインページ(現在は/yourchange/auth/admin)に移動します
  9. ログインしてお楽しみください
4
Mark

無効なパラメーターに直面しました: http://www.baeldung.com/spring-boot-keycloak で利用可能なスプリングブートとキークロークの例に従うと、redirect_uriの問題が発生します。 keycloakサーバーからクライアントを追加する場合、keycloakサーバーがリダイレクトを実行できるように、そのクライアントのリダイレクトURIを提供する必要があります。同じエラーに何度も直面したとき、keycloakサーバーコンソールから正しいURLをコピーし、有効なリダイレクトURIスペースで提供したところ、うまくいきました!

2
Titans

フロント構成については、keycloak管理コンソールを確認する必要があります。リダイレクトURLおよびWebオリジン用に誤って設定する必要があります。

2
boycod3

Keycloak管理コンソールのWebサイトにログインし、レルムとそのクライアントを選択してから、クライアントのすべてのURIにプロトコル、つまりhttp://などの接頭辞が付いていることを確認します。例はhttp://localhost:8082/*です

この問題を解決する別の方法は、Keycloakサーバーのコンソール出力を表示し、リクエストが拒否されたことを示す行を見つけ、そこからredirect_uri表示値をコピーして、クライアントの* Valid Redirect URIsフィールドに貼り付けることです。 Keycloak管理コンソールのWebサイトで。要求されたURIは受け入れ可能なものの1つです。

2
Stephane

このエラーは、ユーザー定義で委任された予期されるロールがない場合にもスローされます(ドロップダウンでレルムのロールを設定します)。

0
zhrist

ログアウト後にキークロークログインページにリダイレクトしようとしている場合(私はそうでした)、これはデフォルトでは許可されていませんが、クライアントの管理コンソールの「有効なリダイレクトURI」設定で構成する必要もあります。

0
jschmuecking

認証コードフローを使用している場合、response_typeクエリパラメータはcodeと等しくなければなりません。 https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html を参照してください

0
ninyarko