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



我正在努力寻找这种行为的原因。我有一个简单的MVC应用程序,配置了SustainSys软件包。我尝试为我们的内部 SecureAuth 服务器和 https://stubidp.sustainsys.com 测试服务器配置它。

这一切都适用于本地主机,当它是我们内部 IIS 服务器的根应用程序时。

当我将其放置在 IIS 子应用程序文件夹中时,它会重定向到 sso 服务器登录名,返回带有身份验证信息的 ~/Saml2/Acs 路由(我在 fiddler2 中看到它(,但 Acs 似乎没有在这一点上处理它,我仍然未经身份验证,因此它返回到登录页面并开始循环。

我知道子应用程序 web.config继承,所以我什至从根中删除了 web.config,因此与子应用程序中的内容没有任何冲突。我已经使用了 returnURL 参数,但没有效果(包含或不包含 sudirectory(。

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>

我解决了这个问题,我想发布修复它的内容,因为也许有一天它可能会帮助其他人。

问题不在于SAML响应或Sustainsys库,而在于web.config中缺少的属性。在将"path='/'"添加到联合配置中的 cookiehandler 元素(见下文(后,它开始在 System.Security.Principal 中保留授权状态,现在在根应用程序以及所有子应用程序中都能完美运行。

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

有两个步骤<编辑>我想这可能会出错:

  1. 生成的 AuthnRequest 中的 ACS URL 不正确。请检查 StubIdp 上显示的 XML 内容,看看它是否正确反映了子应用程序目录。如果不是,这是 Sustainsys.Saml2.Mvc 包中的错误/缺失功能。
  2. 当部署到子目录时,应用程序无法正确调用嵌入在 Sustainsys.Mvc 包中的 MVC 控制器。您可以通过点击 http://yoursite.com/SubDir/Saml2 来测试这一点 - 如果它有效,它应该返回元数据 XML。如果是这种情况,则需要查看应用程序中的路由配置,以确保路径正确路由到 MVC 包中的控制器。

最新更新