历史:我有一个很小的应用程序已经存在于Linux网络服务器上一段时间了:html5 / javascript / perl cgi脚本。 CA提供了一种名为Siteminder的第三方中间件,提供SSO服务,工作正常。就我的情况而言,在linux盒子里,DOCROOT中有一个dir,它面向公众,面向html,js& perl cgi脚本。有一个不同的目录,其中授权内容的页面和标记位于其中。 Siteminder配置为知道此auth-dir和包含该auth-dir元素的请求路径。
Siteminder绑定到Apache并观察请求流,当它看到一个带有路径元素的请求时,它会关注它保持入站请求;将访问者重定向到品牌授权页面;处理auth流,然后,如果经过身份验证,则通过发送原始请求。在这种情况下,auth绑定到AD组。再次,这是有效的。我的页面和代码完全没有意识到Siteminder的存在。
出于上述原因,我决定将内容从linux框移动到IIS服务器。将所有内容转换为C#.Net MVC。我不是一个窗户,但这就是我现在的内容。
我们当地的Siteminder专家告诉我,在IIS下,SM的工作原理与linux完全相同。一旦我转换我的代码,它不需要知道SM ......但是有些东西不起作用。
在我的情况下,由于用户交互,一个模式弹出窗口出现在包含小表单的Public部分(HomeController)中。单击提交按钮会触发一个jQuery GET(我也尝试过PUT,POST和重定向)动作到AuthController中的方法,la:
$.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);
});
我知道有.Net方式说明目标网址,请耐心等待。
我期望发生的是,如果访问者没有Siteminder设置的auth会话cookie,那么他们应该被重定向到SM身份验证流程,并且一旦授权就完成此请求。
相反,会发生什么:
我使用get
方法:它会触发并获得302“对象移动”响应。
如果我使用post
方法:它会触发并且我得到200 Ok响应,但返回的有效负载是来自SM的少量html,如果我没有很快重定向到我的目的地按下该html中表单中包含的按钮。 jQuery fail
promis会触发,因为它期待JSON结果,而不是html。
如果我使用put
没有任何反应。
我注释掉了我的jQuery ajax调用,只是使用了“位置”重定向,然后SM会提出挑战页面;我可以登录;并且,触发请求将“继续”进入长度为3的循环:它调用页面并失败,其中302似乎将请求发送回SM,然后将其发送回目标地址以获得302然后返回到Sm然后回到目标,但它会生成404消息。
我在这里的杂草深处。建议会很精彩
哦,PS:在我的桌面(无SM)上以调试模式运行它。在带有SM的IIS dev服务器上运行Release版本是失败的。
修改
更多信息:在一些额外的siteminder配置之后,我开始收到CORS违规消息。我现在正在设置CORS标头,但这没有任何改变。 Siteminder似乎剥离了CORS标题:/
我注意到的另一件事是,如果我将失败的GET请求设为javascript location.href=url + "?" + queryStringData
重定向,那么一切正常。当前的jquery几乎都在将async
设置为false,因此制作非异步版本的工作量超出了我想要解决的问题。
我认为本地站点管理员很快会提交一张票。
编辑2
我最终得到了一个hacky“修复”。我不能使用标准的GET,POST,PUT等方法与MVC方法交互,因为Siteminder阻碍了。我已经添加了CORS标头,并尝试过JSONP,在这种情况下都没有。
我必须使用“重定向”。在javascript函数中设置location.href = "/usr?thing=foo&bar=baz"
,然后由于MVC方法重定向到url。
这可能是Siteminder配置问题。当地的Siteminder专家提交了一张票。
答案 0 :(得分:0)
您的问题仍然不清楚您列出的每个项目符号的问题。 GET行为符合您的期望吗? 302只是一个重定向,是你期望的重定向吗?
对于" POST",您正在看到" post-preservation"行为。这就是SiteMinder所做的事情,如果你的会话在填写表格时已经超时,你就不会失去工作。后保存是"代理配置对象"中的配置参数。在SiteMinder中。听起来你的SM管理员已经为IIS服务器配置了与Linux服务器不同的ACO。
PUT - 什么都没发生?您根本没有得到任何回复,连接只是挂起?
你的最后一个子弹,带有重定向循环,这个循环通常表示你的用户已登录(已验证)但未经授权,这是SiteMinder策略配置问题(同样听起来不同的策略正在应用于IIS服务器比Linux)
HTH!
-Richard