历史记录:我有一个小型应用程序,它曾经在linux web服务器上生活过一段时间:html5/javascript/perl cgi脚本。有一种称为Siteminder的第三方中间件,它提供SSO服务,并且工作正常。在我的Linux框中,DOCROOT中有一个dir,它包含公用的html,js & perl cgi脚本。有一个不同的目录,其中授权内容的页面和脚本文件位于此目录中。 Siteminder配置为了解此auth-dir和包含auth-dir元素的请求路径。C#.Net MVC和CA/Siteminder中间件
Siteminder绑定到Apache并观察请求流,并且当它看到具有它所关心的路径元素的请求时,它将持有入站请求;将访问者重定向到品牌认证页面;处理认证流程,然后如果通过认证,则发送原始请求。在这种情况下,身份验证绑定到AD组。再次,这工作。我的页面和代码完全不知道Siteminder的存在。
由于上述原因,我已决定将内容从Linux机箱移至IIS服务器。将所有内容转换为C#.Net MVC。我不是一个窗户的人,但这是目前我的盘子里。
我们当地的Siteminder专家告诉我,SM在linux下与IIS完全相同。那一旦我转换我的代码,它不需要知道SM ...但还没有工作。
在我的情况下,由于用户交互,模式弹出窗口出现在公共部分(HomeController)中,该部分包含一个小表单。点击提交按钮会触发一个jQuery GET(我也尝试PUT,POST和重定向)动作的方法在AuthController,一拉:
$.get({
'url': "/Auth/AddNewData",
'contentType': "application/x-www-form-urlencoded; charset=UTF-8",
'dataType': "json",
'traditional': true,
'data': {
'thing': myThing,
'otherThing': myOtherThing
}
}).done(function(data, textStatus, jqXhr) {
console.log("it worked");
}).fail(function(jqXhr, textStatus, errorThrown) {
console.dir(jqXhr);
console.log(textStatus);
console.log(errorThrown);
});
据我所知,有说明的净方法目标网址请与我联系。
我希望发生的事情是,如果访问者没有Siteminder设置的auth会话cookie,那么他们应该被重定向到SM身份验证流程,并且一旦授权完成此请求。
相反,发生的事情是:
我用的是
get
方法:它激发我得到一个302“对象移动”响应。如果我使用
post
方法:它激发,我得到一个200 OK响应,但返回的有效载荷从SM HTML少量说如果我不重定向到我的目的地不久,按包含在按键该HTML中的表单。尽管jQueryfail
promis会引发,因为它期望获得JSON结果,而不是html。如果我使用
put
没有任何反应。我注释掉了我的jQuery ajax调用,并使用“位置”重定向,然后SM将提出其挑战页;我可以登录;并且,触发请求将被“继续”成一个长度为3的循环:它调用页面并且失败,并且看起来将请求发回到SM,在那里它被发送回目标地址以获得302然后返回到Sm然后返回到目标,但它会生成一条404消息。
我在这里的杂草很深。建议将是美好的
哦,PS:在我的桌面上运行此调试模式(没有SM)的作品。使用SM在IIS开发服务器上运行发行版本是失败的。
编辑
更多信息:一些附加的SiteMinder配置后,我开始CORS违章消息。我现在正在设置CORS标题,但这不会改变。 Siteminder似乎剥离CORS标头:/
我注意到的另一件事是,如果我将失败的GET请求制作为javascript location.href=url + "?" + queryStringData
重定向一切正常。目前的jquery几乎都是贬值设置async
为false,因此制作非异步版本比我现在要解决的要多。
本地siteminder乡亲将很快提交一张票,我认为。
EDIT 2
我已经结束了与哈克 “修复”。我不能使用标准的GET,POST,PUT等方法与MVC方法进行交互,因为Siteminder阻碍了它。我添加了CORS头文件并尝试了JSONP,在这种情况下没有任何工作。我不得不使用“重定向”来代替。在javascript函数中设置location.href = "/usr?thing=foo&bar=baz"
,然后重定向到作为MVC方法结果的url。
这可能是一个Siteminder配置问题。当地的Siteminder专家已经提交了一张票。