【发布时间】:2011-12-06 11:15:40
【问题描述】:
我有一个网站试图在另一个网站上调用 MVC 控制器操作。这些站点都设置为 AD FS 2.0 中的信赖方信任。在两个站点之间的浏览器窗口中打开页面时,一切都经过身份验证并且工作正常。但是,当尝试使用 jQuery AJAX 方法从 JavaScript 调用控制器操作时,它总是会失败。这是我正在尝试做的代码 sn-p...
$.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);
}
});
问题在于 AD FS 使用 JavaScript 向依赖方发布隐藏的 html 表单。 当使用 Fiddler 进行跟踪时,我可以看到它到达 AD FS 站点并返回此 html 表单,该表单应该发布并重定向到经过身份验证的控制器操作。问题是该表单作为 ajax 请求的结果返回,并且显然会因解析器错误而失败,因为 ajax 请求需要来自控制器操作的 json。这似乎是一种常见情况,那么从 AJAX 与 AD FS 通信并处理此重定向的正确方法是什么?
【问题讨论】:
-
如果 ajax 调用正在返回 HTML,显然您不想使用 json 解析器对其进行解析。将 dataType 更改为“html”,并发布一个返回的 html 示例,这样我就可以向您展示如何编写一个将提交返回的表单的处理程序。
-
问题是我想取回 JSON。 AD FS 使用它要发布的新 HTML 表单进行重定向,以执行所需的握手。这在浏览器窗口中可以正常工作,但在这里不行。一旦握手发生,AJAX 请求就不会重定向,我会返回 JSON。我现在想出了一个解决方法来处理 IFRAME 中的 html 页面帖子,但这并不理想。
-
我知道您想取回 JSON,但您不会取回 JSON。 但是,如果您希望能够将返回的数据结构视为 是 JSON,请发布返回的 HTML 示例,我将向您展示如何编写一个处理程序,该处理程序将不使用使用 IFRAME 提交返回的表单。
-
为什么在我的情况下它给了我错误“没有访问控制允许访问允许来源”?这是一个 CORS 问题,这意味着我的浏览器阻止了重定向到我的 ADFS 服务器,为什么您的请求可以重定向到 ADFS 服务器?
标签: javascript jquery ajax adfs2.0