5

Tôi đang sửa đổi mẫu oauth2-vanilla từ Springs excellent security tutorials. Oauth2-vanilla kết hợp Proxy Zuul và giao diện người dùng vào một ứng dụng duy nhất. Tôi muốn tách riêng Zuul Proxy và UI. (Proxy Zuul sẽ hoạt động như một cổng API và làm proxy ngược cho một số giao diện người dùng).Bảo mật mùa xuân Oauth2 SSO với Zuul Proxy

Khi truy cập giao diện người dùng thông qua proxy zuul, nó sẽ có thể thực hiện SSO dựa trên Oauth2 giữa giao diện người dùng và phần phụ trợ tài nguyên.

Các OAuth2-vani trông như thế này

Nơi tôi muốn chuyển đến một cái gì đó như thế này:

Tôi đã gỡ bỏ phần giao diện người dùng từ các cửa ngõ, và thêm một tuyến đường zuul cho ui

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

Tôi đã tạo một ứng dụng web UI mới chứa giao diện người dùng (Công cụ góc) với chú thích @EnableOAuth2Sso.

Vì vậy, tôi đang truy cập vào giao diện người dùng qua http://localhost:8888 (thông qua proxy zuul). Sau khi xác thực và thực hiện thông qua luồng giao diện người dùng, tôi có thể truy cập điểm cuối/người dùng trả lại cho tôi người dùng. (Trong quá trình gỡ lỗi, tôi thấy rằng khi tôi truy cập điểm cuối/người dùng mà tôi có Phiên HTTP với OAuth2Authentication.

Tuy nhiên, khi truy cập/điểm cuối tài nguyên, HttpSessionSecurityContextRepository không thể tìm thấy phiên và không thể tạo ngữ cảnh với OAuth2Authentication.

tôi đã tạo a git repository với mẫu sửa đổi.

tôi đoán có cái gì đó sai với cấu hình gateway. tôi đã cố gắng thay đổi đường dẫn cookie, thay đổi HttpSecurity quy tắc trong proxy nhưng tôi không thể làm cho nó hoạt động.

Điều tôi không hiểu là lý do giao diện người dùng, khi được truy cập thông qua proxy có thể giải quyết điểm phạt điểm cuối /user (với phiên HTTP và OAuth2Authentication), nhưng không thể truy cập điểm cuối /resource.

Ngoài ra, vì giao diện người dùng hiện đang chạy trong ngữ cảnh /ui, có vẻ như tôi cần có mã sau trong cổng để tải lên tệp css/js góc.

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

Nó cũng có vẻ không đúng mà tôi cần phải thêm tiền tố nó với con đường ui zuul.

Mọi trợ giúp sẽ được đánh giá cao.

+0

Tại sao giao diện người dùng của bạn có '@ EnableOAUth2Sso'?Tôi đã có thể nghĩ rằng nó là tự nhiên hơn (cho bạn có chú thích đã có trên gateway) để coi nó như một máy chủ tài nguyên ('@ EnableResourceServer'). Tôi nghĩ rằng đó là kết luận chúng tôi đã đến trên gitter là tốt. –

+0

Về "/ tài nguyên": Vấn đề có thể là bạn không bao gồm "bảo mật-đám mây-starter-an ninh". Theo tôi hiểu, thực hiện khớp thực tế giữa phiên và mã thông báo truy cập và chuyển tiếp mã thông báo truy cập dựa trên ID phiên trình duyệt. Tôi biết tôi đã có vấn đề này trước đây. – Filip

+0

Tôi nghĩ rằng cổng (zuul) thực hiện khớp. Dựa trên sessonId mà trình duyệt gửi qua cookie, gateway có thể tìm thấy mã thông báo truy cập tương ứng trên đó. – ddewaele

Trả lời

0

Tôi chưa bao giờ có thể nhận được @EnableOauthSso hoạt động. Thay vào đó, tôi chú thích như một @EnableResourceServer và tạo ra một cấu hình bảo mật cho 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(); 
    } 
} 
Các vấn đề liên quan