.net ACS不处理子应用程序中的SAML响应

.net ACS不处理子应用程序中的SAML响应,.net,forms-authentication,saml-2.0,sustainsys-saml2,.net,Forms Authentication,Saml 2.0,Sustainsys Saml2,我正在努力寻找这种行为的原因。我有一个配置了SustainSys包的简单MVC应用程序。我已经尝试为我们的内部SecureAuth服务器和测试服务器配置它 当它是内部IIS服务器的根应用程序时,所有这些都可以在本地主机上运行 当我把它放在IIS子应用程序文件夹中时,它重定向到sso服务器登录,返回到~/Saml2/Acs路由,带有我在fiddler2中看到的身份验证信息,但Acs似乎没有处理它,我保持未经身份验证,因此它返回到登录页面,我开始循环 我知道子应用程序web.config继承,所以我

我正在努力寻找这种行为的原因。我有一个配置了SustainSys包的简单MVC应用程序。我已经尝试为我们的内部SecureAuth服务器和测试服务器配置它

当它是内部IIS服务器的根应用程序时,所有这些都可以在本地主机上运行

当我把它放在IIS子应用程序文件夹中时,它重定向到sso服务器登录,返回到~/Saml2/Acs路由,带有我在fiddler2中看到的身份验证信息,但Acs似乎没有处理它,我保持未经身份验证,因此它返回到登录页面,我开始循环

我知道子应用程序web.config继承,所以我甚至从根目录中删除了web.config,因此与子应用程序中的web.config没有冲突。无论是否包含sudirectory,我都没有使用returnURL参数

IIS根应用程序和子应用程序中的应用程序的身份验证配置相同

我没什么好测试的了。有人有什么想法吗

<sustainsys.saml2 entityId="https://apps.xxxxx.com" returnUrl="https://apps.xxxxx.com/yyyyy">
    <identityProviders>
        <add entityId="https://sso.xxxxx.com/SecureAuthXX" signOnUrl="https://sso.xxxxx.com/SecureAuthXX" allowUnsolicitedAuthnResponse="true" binding="HttpRedirect">
            <signingCertificate fileName="~/App_Data/SecureAuth03VM.xxxxx.com.cer" />
        </add>
    </identityProviders>
    <federations>
        <add metadataLocation="https://apps.xxxxx.com/Federation" allowUnsolicitedAuthnResponse="true" />
    </federations>
</sustainsys.saml2>
<system.identityModel.services>
    <federationConfiguration>
        <cookieHandler requireSsl="true" name="CookieAuth" />
    </federationConfiguration>
</system.identityModel.services>
我认为有两个步骤可能会出错:

Generated AuthnRequest中的Acs Url不正确。请检查StubIdp上显示的XML内容,查看它是否正确反映了子应用程序目录。如果不是,这是Sustainsys.Saml2.Mvc包中的错误/缺失功能。 部署到子目录时,应用程序无法正确调用Sustainsys.MVC包中嵌入的MVC控制器。您可以通过点击来测试这一点-如果它有效,它应该返回元数据XML。如果是这种情况,您需要检查应用程序中的路由配置,以确保路径正确路由到MVC包中的控制器。
我解决了这个问题,我想把它的解决方法贴出来,也许有一天它会帮助其他人

问题不在于SAML响应或Sustainsys库,而在于web.config中缺少的属性。将path='/'添加到联合配置中的cookiehandler元素(请参见下文)后,它开始在System.Security.Principal中持久化授权状态,现在在根应用程序以及所有子应用程序中都能正常工作

<system.identityModel.services>
    <federationConfiguration>
        <cookieHandler requireSsl="true" name="FedAuth" path="/" />
    </federationConfiguration>
</system.identityModel.services>

您使用的Sustainsys软件包是什么?支持s.Saml2.Mvc?还是奥文?还是HttpModule?@AndersAbel Sustains.Saml2.Mvc。我觉得这是观众的问题,但我无法确认。@AndersAbel Update,我现在已将MVC示例站点从SustainSys部署到子应用程序目录,在该场景中也不起作用。我可以看到使用Chrome调试器中的SAML面板从stubidp.sustainsys.com返回的SAML响应,它包含成功的断言,并以JohnDoe作为名称返回,但Acs忽略了它,没有登录。我在摆弄entityID和returnUrl值,但运气不好。谢谢你的建议,但两者都没有解决问题。Acs URL是正确的,而且mvc路由正确地调用了Acs控制器属性,我可以在fiddler中看到这一点。点击主Saml2路由确实会返回元数据。我想我会尝试将Sustainsys源代码添加到我的项目中,这样我就可以进入在Acs路线中调用的代码中,并希望得到启发。