5

我正在修改oauth2-vanilla樣本Springs excellent security tutorials。 oauth2-vanilla將Zuul代理和用戶界面整合到一個應用程序中。我想分開Zuul代理和用戶界面。 (Zuul代理應該充當API網關,並作爲多個UI的反向代理)。Spring Security Oauth2 SSO與Zuul代理

當通過zuul代理訪問用戶界面時,它應該能夠根據UI和資源後端之間的Oauth2執行SSO。

的的oauth2香草看起來像這樣

,我想移動到這樣的事情:

我從網關刪除UI部分,併爲其添加了zuul路線

zuul: routes: resource: url: http://localhost:9000 user: url: http://localhost:9999/uaa/user ui: url: http://localhost:8080

我創建了一個包含UI(Angular stuff)和@EnableOAuth2Sso註釋的新UI UI webapp。

所以我通過http://localhost:8888(通過zuul代理)訪問UI。 通過UI流進行身份驗證並執行操作後,我可以訪問將用戶返回給我的/用戶端點。 (在調試期間,我看到當我訪問/ OA用戶端點時,我有一個具有OAuth2Authentication的HTTP會話。

但是,當我訪問資源端點時,HttpSessionSecurityContextRepository找不到會話並且無法構建上下文與

的OAuth2Authentication。我創建a git repository與修改後的樣本。

我猜有一些錯誤的網關配置。 我試圖改變Cookie路徑,在代理變化HttpSecurity規則但我不能得到它的工作

我不明白爲什麼UI通過代理訪問時能夠解決/user端點正常(使用HTTP會話和OAuth2Authentication),但無法訪問端點/resource

此外,由於UI現在運行在/ui上下文中,因此似乎需要在網關中具有以下代碼才能加載角度css/js文件。

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

它也似乎不正確的,我需要與zuul UI路由前綴它。

任何幫助,將不勝感激。

+0

爲什麼你的UI有'@EnableOAUth2Sso'?我會認爲這是更自然的(因爲你已經在網關上有這個註釋)把它當作資源服務器('@ EnableResourceServer')。我認爲這也是我們對gitter的結論。 –

+0

關於「/資源」:問題可能在於你不包括「spring-cloud-starter-security」。據我所知,它執行會話和訪問令牌之間的實際匹配,並根據瀏覽器會話ID轉發訪問令牌。我知道我之前有這個問題。 – Filip

+0

我認爲網關(zuul)會進行匹配。根據瀏覽器通過cookie發送的sessonId,網關可以找到相應的訪問令牌,並將其傳遞給資源。 – ddewaele

回答

0

我從來沒有能夠使@EnableOauthSso工作。相反,我註釋爲@EnableResourceServer併爲Zuul創建了一個安全配置。

@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(); 
    } 
} 
相關問題