5

Springs excellent security tutorials'dan oauth2-vanilla örneğini değiştiriyorum. Oauth2-vanilla, Zuul Proxy ve UI'yi tek bir uygulamada birleştirir. Zuul Proxy ve UI'yi ayırmak istiyorum. (Zuul Proxy, bir API ağ geçidi ve birkaç UI için ters bir proxy olarak hareket etmelidir).Spring Security Oauth2 SSO, Zuul Proxy ile

Kullanıcı arabirimine zuul proxy aracılığıyla erişirken, UI ile kaynak arka ucu arasında Oauth2'ye dayanan SSO yapabilmelidir.

OAuth2-vanilya böyle bir şey taşımak istediğiniz bu

benziyor:

ben geçidi gelen UI bölümü kaldırdık, ve ui

zuul: routes: resource: url: http://localhost:9000 user: url: http://localhost:9999/uaa/user ui: url: http://localhost:8080 için bir zuül rotası ekledi.

@EnableOAuth2Sso ek açıklama ile UI (Açısal sayfalar) içeren yeni bir UI webapp'ı oluşturdum.

Yani UI'ye http://localhost:8888 (zuul proxy'si aracılığıyla) üzerinden erişiyorum. Kullanıcı Arabirimi akışını doğruladıktan ve yaptıktan sonra, kullanıcıya döndüren/kullanıcı uç noktasına erişebilirim. (Hata ayıklama sırasında,/kullanıcı uç noktaya bir OAuth2Authentication ile bir HTTP Oturumu eriştiğimde görüyorum.

/Kaynak uç noktasına eriştiğimde, HttpSessionSecurityContextRepository bir oturum bulamıyor ve bir bağlam oluşturamıyor. OAuth2Authentication ile.

Ben değiştirilmiş örnek ile a git repository oluşturduk.

Ben geçidi yapılandırma ile yanlış bir şey var tahmin ediyorum. ben vekaleten HttpSecurity kurallarını değiştirerek, çerez yolları değişen denedim ama işe yaramayacağım,

Niçin anlamıyorum, UI, proxy aracılığıyla erişildiğinde neden /user uç noktasını (HTTP oturumu ve OAuth2Authentication ile) çözebiliyor, ancak /resource uç noktasına erişemiyor. Ayrıca, kullanıcı arabirimi artık /ui bağlamında çalışırken, açısal css/js dosyalarını yüklemek için ağ geçidinde aşağıdaki kodun olması gerekiyor gibi görünüyor.

.antMatchers("/ui/index.html", "/ui/home.html", "ui/css/**", "/ui/js/**").permitAll().anyRequest().authenticated();

Ayrıca ben Zuul ui güzergahı ile öneki gerekebilir hakkı görünmüyor.

Herhangi bir yardım için teşekkür ederiz.

+0

Neden kullanıcı arabiriminiz '@ EnableOAUth2Sso'?Bir kaynak sunucu ('@ EnableResourceServer') olarak ele almak için daha doğal olduğunu düşündüm (ağ geçidinde zaten bir not var). Bence bu, aynı zamanda gitter'e geldiğimiz sonuç. –

+0

"/ resource" ile ilgili olarak: Sorun, "spring-cloud-starter-security" içermiyor olmanız olabilir. Anladığım kadarıyla, oturum ile erişim belirteci arasındaki gerçek eşleşmeyi gerçekleştirir ve tarayıcı-oturumları kimliğine dayalı olarak erişim belirtecini iletir. Daha önce bu problemi yaşadığımı biliyorum. – Filip

+0

Ağ geçidinin (zuul) eşleşmeyi yaptığını düşünüyorum. Tarayıcının çerez üzerinden gönderdiği oturuma bağlı olarak, ağ geçidi, ilgili erişim belirtecini, kaynakta geçirebileceğini bulabilir. – ddewaele

cevap

0

Çalışmak için @EnableOauthSso'yu hiçbir zaman alamadım. Bunun yerine, @EnableResourceServer olarak ek açıklama ekledim ve Zuul için bir güvenlik yapılandırması oluşturdum.

@Configuration 
@EnableResourceServer 
public class JwtSecurityConfig extends ResourceServerConfigurerAdapter { 

    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests() 
      .antMatchers("/oauth/**").permitAll() 
      .antMatchers("/**").hasAuthority("ROLE_API") 
      .and() 
      .csrf().disable(); 
    } 
} 
İlgili konular