2016-03-07 23 views
5

đính kèm cung cấp bối cảnh của tôi cho SAMLContextProviderLB đậuXuân An SAML, chuyển hướng đi đến http thay vì HTTPS khi sử dụng SAMLContextProviderLB thiết lập để chương trình HTTPS

**<property name="scheme" value="https"/>** 
     <property name="serverName" value="${sp.hostname}"/> 
     <property name="serverPort" value="#{'${sp.ssl.port}'=='' ? 443 : '${sp.ssl.port}'}"/> 
     <property name="includeServerPortInRequestURL" value="#{'${sp.ssl.port}'=='443' ? false : true }"/> 
     <property name="contextPath" value="/${sp.context.root}"/> 

tớ ở đằng sau một proxy ngược vì vậy tôi offload Chấm dứt SSL . bản thân máy chủ back-end đang lắng nghe trên không-SSL nhưng webtier đang chấm dứt SSL cho chúng ta và chuyển tiếp đến cổng không phải ssl. Tôi đã thiết lập SAMLContextProviderLB với các thuộc tính trên để thậm chí tho backend là https, nó sẽ biết để ánh xạ người nhận dự định cho mã thông báo saml như đối tượng https. Tuy nhiên, những gì tôi thấy trong nhật ký bên dưới, khi tôi truy cập vào tài nguyên được bảo vệ, nó sẽ trả về rác trên trình duyệt. Khi tôi thay đổi nó thành https trong trình duyệt, nó hoạt động như dự định. Xem nhật ký bên dưới cho thấy giá trị đang được trả về từ URL mặc địnhSaveRequest là HTTP khi nó phải là HTTP.

2016-03-07 18: 24: 11,907 INFO org.springframework.security.saml.log.SAMLDefaultLogger.log: 127 - AuthNResponse; SUCCESS; 10.4.203.88; https://myserver:89/fct;https://www.myADFS.com/adfs/services/trust;[email protected] ;;

2016-03-07 18: 24: 11,909 DEBUG org.springframework.security.saml.SAMLProcessingFilter.successfulAuthentication: 317 - Xác thực thành công. Cập nhật SecurityContextHolder để chứa: org.springf[email protected]830e9237: Hiệu trưởng: [email protected]; Thông tin đăng nhập: [PROTECTED]; Được xác thực: đúng; Chi tiết: null; Không cấp bất kỳ cơ quan chức năng

2016-03-07 18: 24: 11.910 DEBUG org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler.onAuthenticationSuccess: 79 - Chuyển hướng để DefaultSavedRequest Url: http: // myserver: 89/FCT/trang

2016-03-07 18: 24: 11.911 DEBUG org.springframework.security.web.DefaultRedirectStrategy.sendRedirect: 36 - Chuyển hướng đến 'http://myserver:89/fct/page'

2016-03-07 18: 24: 11,911 DEBUG org.springframework.security.web.context.HttpSessionSecurityContextRepository.saveCon văn bản: 292 - SecurityContext được lưu trữ cho HttpSession: '[email protected]0e9237: Xác thực: org.springf[email protected]830e9237: Hiệu trưởng: [email protected]; Thông tin đăng nhập: [PROTECTED]; Được xác thực: đúng; Chi tiết: null; Không cấp bất kỳ cơ quan chức năng

2016-03-07 18: 24: 11.912 DEBUG org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter: 97 - SecurityContextHolder đã được dọn khỏi, như xử lý yêu cầu hoàn

Bất kỳ ý tưởng làm thế nào để buộc điều này để HTTPS theo thiết lập này? Cảm ơn trước.

Trả lời

3

Câu hỏi này là cũ nhưng nếu tôi tìm thấy nó một người nào khác có thể vì vậy tôi sẽ đăng câu trả lời.

Trình cân bằng tải của bạn hoặc Proxy ngược lại (Apache httpd hoặc nginx) phải thực hiện thêm một số công việc cho bạn. Spring (hoặc Spring Boot) và được nhúng Tomcat (hoặc Jetty) nghĩ rằng chúng đang chạy máy chủ http. Nó đang làm gì. Nếu proxy chuyển một số biến tiêu đề, Tomcat sẽ bắt đầu nghĩ rằng nó đang chạy https.

Đây là những gì Apache cần làm ví dụ:

ProxyPreserveHost On 
RequestHeader add X-Forwarded-Proto https 
ProxyPass/http://127.0.0.1:8080/ 
ProxyPassReverse/http://127.0.0.1:8080/ 

ProxyPassProxyPassReverse là những gì bạn có thể đã có. Nhưng số ProxyPreserveHost và số thực sự là X-Forwarded-Proto.

Kiểm tra phần này của Spring Boot Docs. Nếu X-Forwarded-For hoặc X-Forwarded-Proto được thiết lập, bạn cần phải thêm này để application.properties tập tin của bạn:

server.use-forward-headers=true 

Bạn cũng sẽ thấy trong tài liệu đó mà bạn có thể thêm các thuộc tính cho cấu hình cụ thể Tomcat:

server.tomcat.remote-ip-header=x-your-remote-ip-header 
server.tomcat.protocol-header=x-your-protocol-header 

Làm tất cả những điều này ngoài vào những gì bạn có ở trên và nó sẽ bắt đầu hoạt động. Những gì bạn có ở trên, một mình, là không đủ để buộc Tomcat bắt đầu chuyển tiếp các yêu cầu với https.

Tôi thấy rằng vì công ty của tôi có bộ cân bằng tải dựa trên phần cứng (được quản lý bởi Rackspace), nên khó cấu hình nó để thực hiện những thay đổi này. Vì vậy, chúng tôi chấm dứt SSL trong tường lửa/cân bằng tải, sau đó chuyển tiếp các yêu cầu tới Apache trên cổng 80 và Apache chuyển tiếp chúng tới Java trên cổng 8080. Có, đó là một mớ hỗn độn. Nhưng nó có tất cả những việc vô nghĩa này.

Các vấn đề liên quan