Tôi có một trang web đang cố gọi một hành động điều khiển MVC trên một trang web khác. Các trang web này đều được thiết lập như dựa vào tín thác của bên trong AD FS 2.0. Mọi thứ đều xác thực và hoạt động tốt khi mở các trang trong cửa sổ trình duyệt giữa hai trang web. Tuy nhiên, khi cố gọi một hành động điều khiển từ JavaScript bằng phương thức jQuery AJAX, nó luôn thất bại. Dưới đây là đoạn mã về những gì tôi đang cố gắng làm ...Xác thực AD FS 2.0 và AJAX
$.ajax({
url: "relyingPartySite/Controller/Action",
data: { foobar },
dataType: "json",
type: "POST",
async: false,
cache: false,
success: function (data) {
// do something here
},
error: function (data, status) {
alert(status);
}
});
Vấn đề là AD FS sử dụng JavaScript để đăng biểu mẫu html ẩn cho bên phụ thuộc. Khi truy tìm bằng Fiddler, tôi có thể thấy nó vào trang web của AD FS và trả về biểu mẫu html này sẽ đăng và chuyển hướng đến hành động của trình điều khiển đã được xác thực. Vấn đề là hình thức này đang trở lại như là kết quả của yêu cầu ajax và rõ ràng sẽ thất bại với một lỗi phân tích cú pháp vì yêu cầu ajax mong đợi json từ hành động điều khiển. Nó có vẻ như đây sẽ là một kịch bản phổ biến, vì vậy cách thích hợp để giao tiếp với AD FS từ AJAX và xử lý chuyển hướng này là gì?
nếu HTML đang được trả về bởi cuộc gọi ajax, rõ ràng bạn không muốn phân tích cú pháp đó với trình phân tích cú pháp json. thay đổi dataType thành "html" và đăng một ví dụ về html được trả về, vì vậy tôi có thể chỉ cho bạn cách viết trình xử lý sẽ gửi biểu mẫu trả về. – ironchefpython
Vấn đề là tôi muốn lấy lại JSON. AD FS chuyển hướng bằng một biểu mẫu HTML mới mà nó muốn đăng để thực hiện bắt tay mà nó cần. Điều này hoạt động tốt trong một cửa sổ trình duyệt nhưng không có ở đây. Khi bắt tay xảy ra, không có chuyển hướng nào với yêu cầu AJAX và tôi lấy lại JSON. Tôi đã đưa ra một giải pháp cho bây giờ để xử lý các bài đăng trang html trong một IFRAME nhưng nó không phải là lý tưởng. –
Tôi hiểu rằng bạn muốn lấy lại JSON, nhưng bạn sẽ không lấy lại JSON. _However_, nếu bạn muốn có thể xử lý cấu trúc dữ liệu được trả về như thể nó là JSON, hãy đăng một ví dụ về HTML được trả lại và tôi sẽ chỉ cho bạn cách viết trình xử lý sẽ gửi biểu mẫu trả về ** mà không ** sử dụng IFRAME. – ironchefpython