当前位置: 首页 > 知识库问答 >
问题:

C#。Net MVC和CA/Siteminder中间件

谢运良
2023-03-14

历史:我有一个在linux web服务器上运行了一段时间的小应用程序:html5/javascript/perl cgi脚本。CA提供了一种称为Siteminder的第三方中间件,它提供SSO服务,并且运行良好。在我的linux操作系统中,DOCROOT中有一个dir,它保存面向公众的html、js

Siteminder被绑定到Apache中,并观察请求流,当它看到一个包含它关心的path元素的请求时,它会保存绑定中的请求;将访问者重定向到品牌验证页面;处理身份验证流,然后,如果经过身份验证,则通过发送原始请求。在这种情况下,身份验证绑定到广告组。同样,这是可行的。我的页面和代码完全不知道Siteminder的存在。

出于高于我工资等级的原因,已决定将内容从linux框移动到IIS服务器。将所有内容转换为C#。Net MVC。我不是Windows人员,但这是我目前的工作。

我们当地的Siteminder专家告诉我,SM在IIS下的工作方式与linux完全相同。一旦我转换代码,它也不需要知道SM。。。然而,有些东西不起作用。

在我的例子中,由于用户交互,公共部分(HomeController)中会出现一个模式弹出窗口,其中包含一个小表单。单击submit按钮会触发一个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声明目标url的方式,请耐心等待。

我期望发生的是,如果访问者没有Siteminder设置的身份验证会话cookie,那么他们应该被重定向到SM身份验证流,一旦获得授权,就完成此请求。

相反,发生的是:

>

如果我使用post方法:它触发,我得到一个200 Ok的响应,但返回的负载是来自SM的少量html,表示如果我没有很快重定向到我的目的地,请按html表单中包含的按钮。尽管如此,jQuery会触发promis,因为它需要的是JSON结果,而不是html。

如果我使用put什么都不会发生。

我对我的jQuery ajax调用进行了注释,只需使用一个“位置”重定向,然后SM就会显示其挑战页面;我可以登录;并且,触发请求将“继续”进入一个长度为3的循环:它调用页面并失败,302似乎将请求发送回SM,在那里它被发送回目标地址以获取302,然后返回SM,然后返回目标,但它生成404消息。

我在这里的杂草丛中。建议太好了

哦,PS:在我的桌面上以调试模式运行这个(没有SM)可以工作。在IIS dev服务器上使用SM运行发行版是失败的。

编辑

更多信息:在一些额外的siteminder配置之后,我开始收到CORS违规消息。我现在正在设置CORS标头,但这不会改变什么。Siteminder似乎会删除CORS标头:/

我注意到的另一件事是,如果我将失败的GET请求制作为javascript位置。href=url“queryStringData重定向一切正常。当前的jquery几乎将设置async设置为false,所以目前我不想处理非async版本。

我想当地的siteminder人员很快就会提交一张罚单。

编辑2

我最终得到了一个黑客“修复”。我无法使用标准GET、POST、PUT等方法与MVC方法交互,因为Siteminder挡住了去路。我添加了CORS标头并尝试了JSONP,在这种情况下都不起作用。

我必须改用“重定向”。设置<代码>位置。href=“/usr?thing=foo

这可能是Siteminder配置问题。当地的Siteminder专家已经提交了一张罚单。

共有1个答案

阎弘
2023-03-14

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

对于“POST”,您将看到“后期保存”行为。这就是SiteMinder所做的,这样如果您的会话在填写表单的过程中超时,您就不会丢失工作。后期保存是SiteMinder中“代理配置对象”中的一个配置参数。听起来您的SM管理员为IIS服务器配置的ACO与为Linux服务器配置的不同。

什么都没发生?你根本没有得到任何回应,连接就挂掉了?

最后一个项目符号,带有重定向循环,此循环通常表示您的用户已登录(经过身份验证)但未授权,这是SiteMinder策略配置问题(听起来您的IIS服务器应用的策略与Linux不同)

嗯!

理查德

 类似资料:
  • 在windows server 2008 r2和IIS版本7.5中安装了SiteMinder Web代理(ca-wa-IIS7-12.0-sp3-cr010-win64.exe)。IIS服务器下有2个网站(A、B),而代理仅针对一个网站A(在安装过程中选择一个网站)。我没有有效的策略服务器,因此在配置Web代理时输入假IP。 然后在浏览器中访问A,如预期的那样出现错误,但在浏览器中访问B,服务器也

  • 我正在尝试编写一些代码来连接到使用Siteminder身份验证的HTTPS站点。 我一直得到401。有什么想法吗? 我在这里读了一些不同的东西,但没有一个看起来真的很有帮助。我也在使用Fiddler/Firefox Tamper来窥探发生了什么。 这是到目前为止我在代码方面得到的信息:

  • 虽然Visual Studio和Visual Studio Code MVC模板附带了一些客户端包,如jQuery、jQueryValide、bootstrap等。bower.json和. Bowerrc文件完全丢失,所以当我进入VS bowers包管理器时,我看不到已经安装的包这是相当烦人。 问题是这在两周前开始发生在我身上(大约在我尝试npm package manager并进行VS代码更新时

  • 我们正在开发具有移动部分和网络用户界面的应用程序。Web UI使用角,我们在后端配置cors时遇到了问题。我们的代码如下(只是对我们的问题很重要的代码): 从stackoverflow上的文档和其他帖子来看,这应该是可行的,但不是。我们错过了什么? thnx 编辑: 这是邮递员的请求: 卷曲'https://guw.azurewebsites.net/api/token'-X OPTIONS-H'

  • 嗨,我需要检查siteminder的状态,看看它是否已关闭。我当前的解决方案是在指定的环境中ping siteminder的策略服务器。是否有任何方法可以使用c#检查Siteminder是否正常运行?提前感谢

  • 我想在发布者的AEM 6中实现CA siteminder。它的工作方式是应用程序的最终用户将使用登录表单并进入应用程序。成功申请后,用户将登陆主页,在那里她将能够看到她的个人信息,如姓名、出生日期、病史和所有类型的数据。在提供错误的密码时,用户将收到错误消息。这就像任何正常的Web应用程序一样。这里的问题是所有用户信息都将来自后端,即Web服务。CRX中不会保存任何用户或最少的信息。我在sitem