2017-03-07 32 views
1

历史记录:我有一个小型应用程序,它曾经在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中的表单。尽管jQuery fail 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专家已经提交了一张票。

回答

0

你的问题仍然不清楚你列出的每一个项目符号是什么问题。 GET行为是你期望的吗? 302只是一个重定向,它是你期望的重定向吗?

对于“POST”,您会看到“保存后”行为。它是SiteMinder的功能,所以如果您的会话在填写表单的时候已经超时,那么您不会失去工作。 Post保存是SiteMinder中“代理配置对象”中的配置参数。听起来你的SM管理员已经为IIS服务器配置了不同于Linux服务器的ACO。

PUT - 什么都没有发生?你根本没有得到任何答复,连接只是挂起?

你最近的项目符号,重定向循环,此循环通常表示您的用户已登录(已验证)但未授权,这是一个SiteMinder策略配置问题(同样,它听起来像不同的策略正在应用于您的IIS服务器比Linux)

HTH!

- 理查德