keycloak Geçersiz parametre: redirect_uri


87

Kullanıcıyı keycloak'tan doğrulamak için API'mden vurmaya çalıştığımda, ancak bu bana Geçersiz parametre: keycloak sayfasında redirect_uri hatası veriyor. Efendiden ayrı olarak kendi alemimi yarattım. keycloak http üzerinde çalışıyor. Lütfen bana yardım et.


aracılığıyla kontrol ederken elemanı olarak gösteren 500 hata kontrol
VIJAY Thakur

2
Lütfen aynı soruyu birden çok kez göndermeyin. Orijinal sorunuza daha fazla ayrıntı eklemek istiyorsanız, bunu doğrudan sorunuzun altındaki "düzenle" yi tıklayarak yapabilirsiniz.
THelper


1
Yönlendirme
url'sinde

1
Benim durumumda bu aptalca bir hataydı: "http: // <IP adresi>" yerine "<IP adresi>"
SwissNavy

Yanıtlar:


56

Benim için işe yarayan şey wildchar '*' eklemekti . Üretim kurguları için olsa da, bu alanın değeri konusunda daha spesifik olacağım. Ancak geliştirme amaçlı olarak bunu yapabilirsiniz.

görüntü açıklamasını buraya girin

Ayar, keycloak yönetici konsolu -> Realm_Name -> Cients -> Client_Name altında mevcuttur .

DÜZENLEME: BUNU ÜRETİMDE YAPMAYIN. Bunu yapmak büyük bir güvenlik açığı yaratır.


13
Bu yanıt tehlikeli bir güvenlik açığı olabilir, bu şekilde güvensiz yeniden yönlendirme saldırısının kapısını açarsınız.
Michael Courcy

Bu cevabın şu anda en çok oy aldığına inanamıyorum. Bu bir çözüm olmaktan uzaktır ve gerçekten yalnızca yorumlarda görünmelidir. Öte yandan, soruda cevaplanmaya çalışılamayacak kadar az bilgi var.
bsaverino

Keycloak'ı bir mobil uygulamadan kullanırsak oraya ne koymalıyız (React Native kodlu)?
Sebastian Diaz

35

Bir .Net Devloper iseniz, Lütfen Aşağıdan Kontrol Edin Yapılandırmalar keycloakAuthentication seçenekleri sınıf seti CallbackPath = RedirectUri, // bu Özelliğin ayarlanması gerekir, aksi takdirde geçersiz yönlendirme hatası gösterecektir

Ben de aynı hatayla karşılaştım. Benim durumumda, Valid Redirect URI'larla ilgili sorun doğru değildi. İşte izlediğim adımlar bunlar.

İlk olarak keycloack'e yönetici kullanıcı olarak giriş yapın. Sonra bölgenizi seçin (belki bölgeye otomatik olarak yönlendirirsiniz). Sonra aşağıdaki ekranı göreceksiniz

görüntü açıklamasını buraya girin

Sol panelden İstemciler'i seçin . Ardından, uygulamanız için yapılandırdığınız ilgili istemciyi seçin. Varsayılan olarak, seçmezseniz Ayarlar sekmesi olursunuz . Uygulamam 3000 numaralı bağlantı noktasında çalışıyordu, bu nedenle doğru ayarım aşağıdaki gibi. Diyelim ki localhost: 3000 üzerinde çalışan bir uygulamanız var, bu yüzden ayarınız şöyle olmalı

görüntü açıklamasını buraya girin


19

Bu hatayı yarattığınız yeni bir bölge yüzünden alıyorsanız

Yeniden yönlendirildiğiniz URL'de (bu URL için Chrome geliştirme araçlarına bakmanız gerekebilir), bölgeyi masteryeni oluşturduğunuzdan değiştirin ve kullanmıyorsanız https, redirect_uri'nin de kullandığından emin olun http.

Bu hatayı, Keycloak'ı halka açık bir alanda (localhost değil) kurmaya çalıştığınız için alıyorsanız

Adım 1) Bir MySql veritabanı kurmak için bu dokümantasyonu izleyin . Resmi belgelere de bakmanız gerekebilir .

Adım 2) Komutu çalıştırınupdate REALM set ssl_required = 'NONE' where id = 'master';

Not: Bu noktada, teknik olarak oturum açabilmeniz gerekir, ancak Keycloak'ın 4.0 sürümü, https desteğini henüz kapatmış olsak da yeniden yönlendirme uri'si için https kullanıyor. Keycloak bunu düzeltene kadar, ters bir proxy ile bu sorunu aşabiliriz. Ters proxy, Java anahtar depoları hakkında endişelenmenize gerek kalmadan kolayca SSL / TLS sertifikaları oluşturmak için kullanmak isteyeceğimiz bir şeydir.

Not 2: Keycloak o zamandan beri kendi vekilleriyle çıktı. Bunu henüz denemedim, ancak bu noktada, yönergelerimi izlemeyi bırakıp (keycloak gatekeeper) [ https://www.keycloak.org/downloads.html] 'a göz atmak isteyebilirsiniz . Keycloak Gatekeeper'ı kurmakta sorun yaşıyorsanız, Apache ile bir ters proxy kurmak için talimatlarımı burada tutacağım.

Adım 3) Apache'yi kurun. Apache'yi ters proxy olarak kullanacağız (NGINX'i denedim, ancak NGINX'in bazı sınırlamaları vardı). Bkz yum Apache yükleme (CentOS 7) ve Apache yüklemek apt-get (Ubuntu 16), ya da belirli bir yöne çevirmek için talimatlar.

Adım 4) Apache'yi çalıştırın

  • Kullanım sudo systemctl start httpd(CentOS) ya da sudo systemctl start apache2(Ubuntu)

  • Kullanım sudo systemctl status httpd(CentOS) ya da sudo systemctl status apache2 Apache çalışıyorsa (Ubuntu) kontrol etmek. Yeşil metinde kelimeleri görürseniz active (running)veya son giriş okursa, Started The Apache HTTP Server.o zaman iyisinizdir.

Adım 5) Ters proxy ile bir SSL bağlantısı kuracağız ve ardından ters proxy http üzerinden keyCloak ile iletişim kuracak. Bu http iletişimi aynı makinede olduğu için hala güvendesiniz. Otomatik yenilenen sertifikaları ayarlamak için Certbot'u kullanabiliriz .

Bu tür şifreleme yeterince iyi değilse ve güvenlik politikanız uçtan uca şifreleme gerektiriyorsa, SSL'yi ters proxy kullanmak yerine WildFly aracılığıyla nasıl kuracağınızı bulmanız gerekecektir .

Not: Aslında hiçbir zaman https'nin yönetici portalıyla düzgün çalışmasını sağlayamadım. Belki de bu, kullandığım Keycloak 4.0'ın beta sürümündeki bir hata olabilir. SSL seviyesini yalnızca harici istekler için gerektirecek şekilde ayarlayabileceğinizi varsayarsınız, ancak bu işe yaramadı, bu yüzden 2. adımda https'yi hiçbiri olarak ayarladık. Bundan sonra, yönetici ayarlarını yönetmek için bir SSH tüneli üzerinden http'yi kullanmaya devam edeceğiz.

Adım 6) Siteyi https üzerinden her ziyaret ettiğinizde, http isteklerini otomatik olarak https'ye yönlendirmeye zorlayacak bir HSTS politikasını tetikleyeceksiniz. HSTS kuralını Chrome'dan temizlemek için bu talimatları izleyin ve ardından şimdilik sitenin https sürümünü bir daha ziyaret etmeyin.

Adım 7) Apache'yi yapılandırın. İlk önce httpd.conf dosyanızın nerede olduğunu bulun . Httpd.conf dosyanız büyük olasılıkla ayrı bir dizinden yapılandırma dosyaları içermektedir. Benim durumumda, tüm yapılandırma dosyamı conf.dhttpd.conf dosyasının bulunduğu klasörün yanında bulunan bir dizinde buldum .

Conf dosyalarınızı bulduğunuzda, değiştirin veya aşağıdaki sanal konak girişlerini conf dosyalarınıza ekleyin. Certbot tarafından oluşturulan halihazırda mevcut olan SSL seçeneklerini geçersiz kılmadığınızdan emin olun. Bittiğinde, yapılandırma dosyanız böyle bir şeye benzemelidir.

<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>

Adım 8) Apache'yi yeniden başlatın. Kullanım sudo systemctl restart httpd(CentOS) ya da sudo systemctl restart apache2(Ubuntu).

Adım 9) Sunucuda oturum açma şansınız olmadan önce, Keycloak'a http kullanmasını söylediğimizden, güvenli bir şekilde bağlanmak için başka bir yöntem kurmamız gerekiyor. Bu, keycloak sunucusuna bir VPN hizmeti yükleyerek veya SOCKS kullanarak yapılabilir. Bir SOCKS proxy kullandım. Bunu yapmak için önce dinamik bağlantı noktası yönlendirmeyi kurmanız gerekir.

ssh -N -D 9905 user@example.com

Veya Putty ile kurun .

9905 numaralı bağlantı noktasına gönderilen tüm trafik artık bir SSH tüneli aracılığıyla sunucunuza güvenli bir şekilde yönlendirilecektir. Sunucunuzun güvenlik duvarında 9905 numaralı bağlantı noktasını beyaz listeye eklediğinizden emin olun.

Dinamik bağlantı noktası yönlendirme kurulumuna sahip olduğunuzda, tarayıcınızı 9905 numaralı bağlantı noktasında bir SOCKS proxy kullanacak şekilde ayarlamanız gerekecektir . Talimatlar burada .

Adım 10) Artık Keycloak yönetici portalına giriş yapabilmelisiniz. Web sitesine bağlanmak için http://127.0.0.1 adresine gidin ve SOCKS proxy sizi yönetici konsoluna götürür. Sunucunuzun kaynaklarını kullandığı için işiniz bittiğinde SOCKS proxy'sini kapattığınızdan emin olun ve açık tutulursa sizin için daha yavaş bir internet hızına neden olur.

Adım 11) Tüm bunları anlamamın ne kadar sürdüğünü sormayın.


1
Dikkatimi çeken satır şuydu: # https redirect_uri parametrelerini http RewriteCond% {request_uri} \?% {Query_string} ^ (. *) Redirect_uri = https (. *) $ RewriteRule olarak değiştirin. % 1redirect_uri = http% 2 [NE, R = 302] nginx kullanıyorum, ancak redirect_uri üzerinde https'yi http ile değiştirir değiştirmez işe yaradı.
Telmo Dias

9

Keycloak yönetici konsolu> SpringBootKeycloak> Cients> oturum açma uygulaması sayfasına gidin. Burada geçerli yönlendirme uris bölümünde http: // localhost: 8080 / sso / login ekleyin

Bu, dolaylı-uri sorununun çözülmesine yardımcı olacaktır


13
Sorun, yönetici konsolunun erişilebilir olmamasıdır.
SmallChess

Keycloak'ın web-contextayarını değiştirdikten sonra bu sorunu yaşadım
Mark

5

Keycloak bağlam yolunda bir değişiklik yaptıktan sonra bu sorunu görüyorsanız, yönlendirme URL ayarında ek bir değişiklik yapmanız gerekir:

  1. Değişim <web-context>yourchange/auth</web-context>geri <web-context>auth</web-context>de standalone.xml
  2. Keycloak'ı yeniden başlatın ve oturum açma sayfasına gidin ( /auth/admin)
  3. Oturum açın ve "Ana" bölgeyi seçin
  4. Yan menüden "Müşteriler" i seçin
  5. Görünen listeden "güvenlik-yönetici-konsolu" istemcisini seçin
  6. "Geçerli Yeniden Yönlendirme URI'larını" olarak /auth/admin/master/console/*değiştirin /yourchange/auth/admin/master/console/*
  7. Kaydedin ve oturumu kapatın. Oturumu kapattıktan sonra tekrar "Geçersiz yönlendirme url'si" mesajını göreceksiniz.
  8. Şimdi, <web-context>yourchange/auth</web-context>standalone.xml'deki orijinal değişikliğinizi ekleyin Keycloak'ı yeniden başlatın ve oturum açma sayfasına gidin (şimdi var /yourchange/auth/admin)
  9. Giriş yapın ve keyfini çıkarın

1
alternatif olarak, redirect_uris
DB'deki

4

Keycloak yönetici konsolu web sitesinde oturum açın, bölgeyi ve istemcisini seçin, ardından istemcinin tüm URI'larının protokole yani http://örneğin ön ekine sahip olduğundan emin olun . Bir örnek olabilirhttp://localhost:8082/*

Sorunu çözmenin bir başka yolu, Keycloak sunucu konsolu çıktısını görüntülemek, isteğin reddedildiğini belirten satırı bulmak, ondan redirect_urigörüntülenen değeri kopyalayıp * Valid Redirect URIsKeycloak yönetici konsolu web sitesinde istemci alanına yapıştırmaktır . İstenen URI, bu durumda kabul edilebilirlerden biridir.


2

Http://www.baeldung.com/spring-boot-keycloak adresinde bulunan spring boot ve keycloak örneğini takip ederken Geçersiz parametre: redirect_uri problem problemiyle karşılaştım . istemciyi keycloak sunucusundan eklerken, keycloak sunucusunun yeniden yönlendirmeyi gerçekleştirebilmesi için o istemci için yeniden yönlendirme URI'sini sağlamamız gerekir. Aynı hatayla birçok kez karşılaştığımda, keycloak sunucu konsolundan doğru URL kopyalamayı takip ettim ve geçerli Yeniden Yönlendirme URI'leri alanında sağladım ve iyi çalıştı!


Nasıl yapıldığını açıklayabilir misin
Subin Babu

2

ben bile aynı sorunla karşılaştım. Alanın altındaki belirli bir istemciye giderek bunu düzelttim, ardından URL'nizi tamamladıktan sonra yeniden yönlendirme URL'si * ekleyin.

PROBLEM ÇÖZÜLECEK

Örnek: yönlendirme URI'si: http: localhost: 3000 / myapp / generator / *


2

Ben de aynı sorunla karşılaştım. Alanın altındaki belirli bir istemciye giderek bunu düzelttim, ardından URL'nizi tamamladıktan sonra yeniden yönlendirme URL'si * ekleyin.


2

Benim için, /değerinde eksik bir eğik çizgi vardıValid Redirect URIs



1

Ön yapılandırma için keycloak yönetici konsolunu kontrol etmeniz gerekir. Yönlendirme url'si ve web kaynakları için yanlış yapılandırılmalıdır.


1

Çıkış yaptıktan sonra keycloak giriş sayfasına yeniden yönlendirmeye çalışıyorsanız (benim eskiden olduğu gibi), buna varsayılan olarak izin verilmez ancak istemcinizin yönetici konsolundaki "Geçerli Yönlendirme URI'leri" ayarında yapılandırılması gerekir.


1

Bu hata, Kullanıcınız Kullanıcı tanımında atanmış beklenen Rol'e sahip olmadığında da atılır (Açılır menüde Bölge için rolü ayarlayın).


0

Kodunuzdaki (keycloak.init) yeniden yönlendirme URI'niz, Keycloak sunucusunda (istemci -> Geçerli URI) ayarlanan yeniden yönlendirme URI'si ile aynı olmalıdır. kodumun resmini görmek için tıklayın keycloak ayarlarımı görüntülemek için tıklayın


0

Redirect_uri parametresinin değerinin, kullandığınız müşteri için beyaz listeye alındığını kontrol edin. İstemcinin yapılandırmasını yönetici konsolu aracılığıyla yönetebilirsiniz.

Yönlendirme uri'si, beyaz listeye alınan yönlendirme URL'lerinden biriyle tam olarak eşleşmelidir veya beyaz listeye eklemek istediğiniz uri'nin sonunda bir joker karakter kullanabilirsiniz. Bakınız: https://www.keycloak.org/docs/latest/server_admin/#_clients

Yeniden yönlendirme uri'lerini beyaz listeye eklemek için joker karakterlerin kullanımına Keycloak tarafından izin verildiğini, ancak aslında OpenId Connect belirtiminin ihlali olduğunu unutmayın. Bununla ilgili tartışmaya https://lists.jboss.org/pipermail/keycloak-dev/2018-December/011440.html adresinde bakın.


0

Bölge adınıza boşluk koyarsanız bu sorun ortaya çıkabilir. İsmim ayarlandı Debugging Realmve bu hatayı aldım. Değiştirdiğimde DebuggingRealmişe yaradı.

Görünen adda hala boşluk olabilir. Garip, keycloak yönetici girişinde bunu kontrol etmiyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.