几天前我下载了SAML2 的 WIF 扩展并一直在试验它们。下载中的示例使用 WebForms 应用程序,我试图弄清楚如何在 MVC3 中使用它们。
我目前能够对下载随附的示例身份提供程序进行身份验证,使用以下方法:
Saml2AuthenticationModule.Current.SignIn(
"~/sign-on/saml2/success", "urn:samples:identityprovider");
我在“sign-on/saml2/success”路由/URL 处有一个操作方法,当应用程序流到达它时,它Thread.CurrentPrincipal.Identity
确实是IClaimsIdentity
. 虽然Identity.IsAuthenticated
等于 true,但Identity.Name
是一个空字符串。(这在我们的应用程序中会出现问题,到目前为止,它使用了 FormsAuthentication,并依赖于Identity.Name
解析到数据库中的用户帐户。)
我还看到此时有 4 个新 cookie:
- 联邦身份证
- 联邦认证
- FedAuth1
- [第四个 cookie 名称是 GUID,每个 SSO 都会更改]
在这一点上,我倾向于删除这 4 个 cookie 并使用声明NameIdentifier
在我们的应用程序中创建一个新帐户(除非已经存在),然后使用 FormsAuthentication 为用户编写一个 .ASPXAUTH cookie。
我们将集成的第一个附属 IdP 使用 Shibboleth,但他们尚未实现 SingleLogOut。所以我的假设是,当我们开始测试这个集成时,以下内容不会有任何影响:
Saml2AuthenticationModule.Current.SignOut("~/sign-off/saml2/success");
因此,手动删除 4 个 cookie 是我们能够Identity.IsAuthenticated
返回错误值的唯一方法。
我是否以不正确的方式处理这个问题?在 IClaimsIdentity 被使用并转移到 FormsAuthentication 之后,是否有任何影响,我没有考虑?