7

Spring Boot OAuth2 öğretici ile etrafında dayak oldum ve benim oldukça unsur çalışma almak gibi olamaz: Ben bir yetki sunucusu olarak çalıştırmak istiyorumSpring Oauth2 oturum açma yönlendirme nasıl çalışır?

https://spring.io/guides/tutorials/spring-boot-oauth2/

. Talimatları izlediğim kadar yakından takip ettim, ama/oauth/authorize uç noktasına gittiğimde, tek alabildiğim 403 Yasak yanıt.

protected void configure(HttpSecurity http) throws Exception { 
    http 
     .antMatcher("/**") 
     .authorizeRequests() 
     .antMatchers("/", "/login**", "/webjars/**") 
     .permitAll() 
     .anyRequest() 
     .authenticated() 
     .and().logout().logoutSuccessUrl("/").permitAll() 
     .and().csrf().csrfTokenRepository(csrfTokenRepository()) 
     .and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class) 
     .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class); 
} 

Bu eğitimde için giriş sayfası aslında ana indeks ve ben kesinlikle Oauth talimat olacağını eğitimde şey görmüyorum: Benim öğretici kurar HttpSecurity yapılandırması verilen Bu aslında mantıklı sistem giriş akışını oraya yönlendirir.

alabilirim bu biraz bu ekleyerek çalışma:

 .and().formLogin().loginPage("/") 

... ama gerçekten bu öğretici veya benim uygulanması yoksa başka bir şey ile ilgili bir sorun olup olmadığını anlamak istedim ilerlemeden önce . Oauth güvenlik sisteminin "giriş" sayfasının ne olduğuna karar verdiği mekanizma nedir?

+0

Merhaba @Ryan, bunu zaten çözdünüz mü? –

+0

Bir çözüm buldum ama örneklemin nasıl çalışması gerektiğini açıklamıyor. Bu nedenle, güvenlik sisteminin bu örnekte kimlik doğrulaması için "/" ye yönlendirilmesine neden olan şeyden emin değilim. Çözümü aşağıda değindiğim için aşağıya göndereceğim. – Ryan

+0

Yayınlayabilir misiniz? Bir şeyleri kazabilir miyim diye açıklamaya çalışalım. –

cevap

7

çözüm SecurityConfig.configure çağrınıza aşağıdaki eklemek oldu:

bu durumda belirli bir URL'ye kimlik doğrulama akışını yönlendirirken (
@Override 
protected void configure(HttpSecurity http) throws Exception { 
    AuthenticationEntryPoint aep = new AuthenticationEntryPoint() { 

     @Override 
     public void commence(HttpServletRequest request, 
       HttpServletResponse response, 
       AuthenticationException authException) throws IOException, 
       ServletException { 
      response.sendRedirect("/login"); 
     } 
    }; 

    http.exceptionHandling() 
      .authenticationEntryPoint(aep) 

ben "/ login" gönderiyorum, ama Ayrıca "/" veya seçtiğim başka bir şeyle çalıştı. Öğreticinin, bu satırı açıkça eklemeden yönlendirmeyi nasıl yapması gerektiği konusunda hiçbir fikrim yok.

-1

Doğrudan/oauth/authorize bitiş noktasına gitmeniz gerekmez. Bu, sahne arkasında kullanılır ve index.html sayfası, öğreticinin gösterdiği sayfadır.

+0

Eğiticiden sonra, ilk olarak yetkilendirme sunucusu olarak kullanılan ikinci bir hizmet kurduk. Kullanıcı yetkilendirme uç noktası olarak oauth/yetkilendirir. Yetkilendirme sunucusu bir giriş sayfasına yönlendirmelidir. Bu, form kimlik doğrulaması ile çalışır, ancak harici sosyal oturum açmalarla oluşturulmuş şekilde değil: "Yeni özellikleri test etmek için her iki uygulamayı da çalıştırabilir ve tarayıcınızda 127.0.0.1:9999 adresini ziyaret edebilirsiniz. İstemci uygulaması yerel Yetkilendirme Sunucusuna yeniden yönlendirilir. Daha sonra kullanıcıya Facebook veya Github ile her zamanki kimlik doğrulama seçimini verir. " – Ryan

+0

Tamam, asıl sorunun, istemci uygulamanıza/oauth/yetkisine gidip gelmemenizi sağladı. – Kim

+0

Bu eğiticiyi daha önce kurdum ve eğitimin bu kısmındayken 403 hatasını almadım, ancak yapıştırdığınız kodunuz (eksi loginPage() bölümü) doğru görünüyor. Bu yüzden, farklı bir kod bölümünden yönlendirilememesi/olması gerekir. Uygulama varsayılan olarak/olmalıdır. bu nedenle, giriş sayfasını başka bir yere koymadığınız sürece, formLogin() komutunu çağırmak gerekli değildir. Başka bir uygulamada,/login olarak ayarladım, bu yüzden bu komutu kullanıyorum. Gerekirse, formLogin() komutunu kullanarak yanlış bir şey olmalı. – Kim

2

Lütfen this numaralı cevabı takip edin. 1. Sen Apache vekaleten üzerinde kurulum için başlıklara sahip:

<VirtualHost *:443> 
    ServerName www.myapp.org 
    ProxyPass/http://127.0.0.1:8080/ 
    RequestHeader set X-Forwarded-Proto https 
    RequestHeader set X-Forwarded-Port 443 
    ProxyPreserveHost On 
    ... (SSL directives omitted for readability) 
</VirtualHost> 

2. Bu başlıkları kullanmak için Bahar Önyükleme app söylemeliyiz. Bu yüzden aşağıdaki satırı uygulamanızda (örneğin, Spring Boots'in özellikleri anladığı başka bir yere koyun):

server.use-forward-headers=true 
İlgili konular