6

Hy vọng đây là một câu hỏi đơn giản dành cho ai đó ở ngoài đó.Chuyển hướng MVC với tiêu đề tùy chỉnh

Về cơ bản khi nhận được một yêu cầu để điều khiển MVC của tôi, tôi muốn:

  1. Thêm một "ủy quyền" tiêu đề để đáp ứng
  2. Redirect đến một ứng dụng khác đang ngồi trên tên miền khác
  3. Đọc " Ủy quyền "tiêu đề tại trang web bên ngoài này.

Dường như hành động chuyển hướng, loại bỏ tất cả tiêu đề tùy chỉnh và chuyển hướng của tôi.

Câu hỏi của tôi, làm cách nào để thêm tiêu đề mới, VÀ thực hiện chuyển hướng VÀ có tiêu đề đó hiển thị trong tiêu đề cho máy chủ nhận [ở cuối chuyển hướng] để đọc không?

Trả lời

2

Không - chuyển hướng 302 được xử lý bởi trình duyệt và sẽ không đính kèm lại tiêu đề.

Options:

  • cookie phía máy chủ Proxy
  • sử dụng thay vì tiêu đề khác (nếu nó là cùng một tên miền, không phải trường hợp của bạn mỗi 2)
  • thủ công chuyển hướng phía khách hàng (có thể ok từ bạn vẫn đang thực hiện cuộc gọi AJAX).
+0

Hãy cho tôi biết thêm về 'phía khách hàng chuyển hướng thủ công này (có thể vẫn ổn vì bạn vẫn đang thực hiện cuộc gọi AJAX).' – user1265146

+0

Tôi thích ý tưởng này ... hãy cho tôi biết thêm về 'phía khách hàng chuyển hướng thủ công này (có thể là ok vì bạn đang thực hiện cuộc gọi AJAX)'. Tôi sẽ cần phải đặt tiêu đề auth và có nó để mở trong một cửa sổ hoặc tab mới. – user1265146

+0

@ user1265146 - "thủ công" như nhận được phản hồi 200 bình thường từ máy chủ của bạn có chứa một cái gì đó như '{header: XXXX, location: url}' và thực hiện yêu cầu AJAX thứ hai cho vị trí đó.Vì bạn có thể muốn đăng lên miền khác, bạn có thể không thực hiện được yêu cầu đó (trừ khi miền khác hỗ trợ CORS). –

8

Bạn không thể. Đó không phải là cách HTTP hoạt động. Đầu tiên, "chuyển hướng" chỉ là mã trạng thái 301, 302 hoặc (kể từ HTTP 1.1) 307 với tiêu đề Location được đặt thành URL mà khách hàng sẽ truy cập. Đó là ứng dụng khách bắt đầu yêu cầu tới URL đó, do đó bạn không thể kiểm soát những tiêu đề mà họ gửi.

Thứ hai, HTTP là không quốc tịch, do đó, tiêu đề Authorization được gửi trong một số phản hồi tại một số điểm có số mang bất kỳ điều gì xảy ra trong bất kỳ yêu cầu nào trong tương lai. Trình duyệt web và các ứng dụng HTTP khác chạy quanh bản chất không trạng thái của HTTP bằng cách sử dụng các phiên ở phía máy chủ và cookie ở phía máy khách. Máy khách gửi cookie đến máy chủ với yêu cầu. Cookie khớp với một mục trong kho lưu trữ phiên trên máy chủ và máy chủ tải lên dữ liệu từ phiên đó để cung cấp cho giao diện như thể trạng thái được duy trì.

Thứ ba, cookie không hoạt động trong trường hợp này, vì chúng là miền bị ràng buộc và không được gửi cùng với các yêu cầu đến tên miền mà chúng không bắt nguồn từ đó. Vì vậy, ngay cả khi bạn đã tạo phiên để duy trì ủy quyền, trang web khác sẽ không bao giờ thấy nó.

FWIW, tiền đề cơ bản ở đây, chia sẻ trạng thái xác thực với một tên miền khác, là chính xác những công nghệ như OAuth được phát triển. Vì vậy, nghiên cứu trực tiếp trong tương lai theo hướng đó.

+0

@chrris Cảm ơn bạn đã phản hồi rất kỹ lưỡng. Tôi thực sự đang sử dụng OAuth, nhưng với trường hợp sử dụng rất cụ thể mà chúng tôi không chuyển hướng cho thông tin đăng nhập, tất cả đều được hỗ trợ bởi 'ứng dụng đáng tin cậy', giờ tôi muốn gắn mã thông báo vào tiêu đề để một ứng dụng đáng tin cậy khác 'có thể đọc các tuyên bố và xử lý cho phù hợp ... tất cả mà không có chuyển hướng đến idP. Alexei đã đề cập làm điều đó trong ứng dụng khách, điều này là có thể vì tôi có mã thông báo trên máy khách. Tôi chỉ cần có thể thêm tiêu đề xác thực và yêu cầu kích hoạt trong tab/cửa sổ mới. Tôi cho rằng điều này là có thể? – user1265146

+2

Những gì bạn mô tả là điều rất OAuth và HTTP như là một giao thức không cho phép vào mục đích. Đó không phải là * bạn *, người xác định nội dung nào và không phải là "ứng dụng đáng tin cậy", đó là * người dùng *. Điều đó được thực hiện thông qua xác thực với một thực thể đã biết. Khi một thực thể khác có liên quan, việc xác thực là cần thiết một lần nữa vì người dùng không tin cậy thực thể mới đó. Không có cách nào để mặc xung quanh điều này * theo thiết kế *. Để có thể là một lỗ hổng bảo mật rất lớn. –

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