在 MVC 的 Idp 发起的 SSO 环境中使用 WIF

Posted

技术标签:

【中文标题】在 MVC 的 Idp 发起的 SSO 环境中使用 WIF【英文标题】:Using WIF in an Idp-Initiated SSO environment from MVC 【发布时间】:2012-07-03 16:13:37 【问题描述】:

我有一个 MVC 4 应用程序从发起 IdP 接收 SAML2 令牌。我可以在令牌到达时看到它,并且可以对其进行解密。但是,我想使用 WIF 3.5 执行此操作,并且当我尝试使用 WSSecurityTokenSerializer 时似乎遇到了 SAML 命名空间问题,如下所示:

System.Xml.XmlException 未被用户代码处理 H结果=-2146232000 Message=Cannot read the token from the 'Response' element with the 'urn:oasis:names:tc:SAML:2.0:protocol' namespace for BinarySecretSecurityToken, with a '' ValueType.如果预期此元素有效,请确保将安全性配置为使用具有指定名称、命名空间和值类型的令牌。 源=System.ServiceModel 行号=0 线位置=0 堆栈跟踪: 在 System.ServiceModel.Security.WSSecurityTokenSerializer.ReadTokenCore(XmlReader 阅读器,SecurityTokenResolver tokenResolver) 在 System.IdentityModel.Selectors.SecurityTokenSerializer.ReadToken(XmlReader 阅读器,SecurityTokenResolver tokenResolver) 在 g:\Projects\mytempesub\Solution\SamlHandlingTests\SamlTests.cs:line 112 中的 SamlHandlingTests.SamlTests.TestMethod1() 内部异常:

我在*** question 看到了一个帖子,但直接使用 XML 做事的最终解决方案不适合我,因为我需要能够将其作为标准 IdP 发起的解决方案来运行。

因此我有两个问题:

    有没有人设法用 WIF 克服这个错误? (我不需要 WIF 扩展,因为我只关心处理 SAML2 令牌,而不是协议。

    要在 IdP 发起的环境中使用 WIF,我知道不需要配置,我只需关闭身份验证并检查传入的令牌。但是,我更愿意在完整的 WIF 管道中检查令牌,但这需要配置。如何配置 WIF 以在此 IdP 启动的环境中运行?

非常感谢

布赖恩

【问题讨论】:

【参考方案1】:

如果您需要反序列化令牌,您可以考虑使用Saml2SecurityTokenHandler。

我还要问,您的场景是否需要您自己反序列化令牌? WIF 与 ASP.NET MVC 应用程序很好地集成,因此您可能会依赖 WIF 来为您执行此操作。请参阅 Eugenio 的 answer here。

【讨论】:

如果这是由 SP 发起而不是由 IdP 发起的 SSO 会更容易。出于这个原因,Eugenio 答案的链接在我的场景中不起作用。但是,您指向 Saml2SecurityTokenHandler 的指针看起来非常有用。我试试看

以上是关于在 MVC 的 Idp 发起的 SSO 环境中使用 WIF的主要内容,如果未能解决你的问题,请参考以下文章

SP 发起的 SSO 和 IDP 发起的 SSO 之间的区别

在哪里测试 IdP 发起的 SSO?

OpenID Connect 和 IDP 发起的 SSO

Cognito缺乏IDP发起的SSO

如何在身份提供者 (IdP) 发起的 SAML sso 中维护状态参数?

从 SP 发起的 SSO 转换为 IdP 发起的 SSO