我正在修改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路由前綴它。
任何幫助,將不勝感激。
爲什麼你的UI有'@EnableOAUth2Sso'?我會認爲這是更自然的(因爲你已經在網關上有這個註釋)把它當作資源服務器('@ EnableResourceServer')。我認爲這也是我們對gitter的結論。 –
關於「/資源」:問題可能在於你不包括「spring-cloud-starter-security」。據我所知,它執行會話和訪問令牌之間的實際匹配,並根據瀏覽器會話ID轉發訪問令牌。我知道我之前有這個問題。 – Filip
我認爲網關(zuul)會進行匹配。根據瀏覽器通過cookie發送的sessonId,網關可以找到相應的訪問令牌,並將其傳遞給資源。 – ddewaele