SAML 与 ASP.NET Core 身份的集成

Posted

技术标签:

【中文标题】SAML 与 ASP.NET Core 身份的集成【英文标题】:SAML integration with ASP.NET Core Identity 【发布时间】:2020-05-28 15:13:54 【问题描述】:

我们的服务提供商要求提供以下 SAML 集成信息。

身份提供商 ID(例如 http://myadfs.domain.com/adfs/services/trust) XML 元数据(例如http://your-adfs-domain.com/Federation/Metadata/2007-06/Federationmetadata.xml) 用户名属性(例如http://myadfs.domain.com/ws/2008/06/identity/claims/windowsaccountname)

现在这是我第一次尝试使用 SAML,我需要构建身份提供程序,并且我想使用 ASP.NET Core Identity 进行用户身份验证。

按照我的理解,流程是

    在服务提供商网站上,他们有一个使用 SAML SSO 登录的按钮 点击按钮将重定向到身份提供者的登录页面 输入用户名和密码,并使用 asp.net 核心身份对我们的数据库进行身份验证 如果成功,返回索赔信息 登录到服务提供商站点

我研究并发现了几个与 ASP.NET Core 的开源 SAML 集成,例如 Sustainsys 或 ITfoxtec。 Sustainsys 有几个 samples,似乎 SampleIdentityServer4AspNetIdentity 是要走的路。

    使用 .net 身份构建身份提供者是否合适? Startup.cs 中的 new EntityId("https://localhost:44342/Saml2")new EntityId("http://localhost:52071/Metadata") 是什么?我在哪里可以获得这些值?

任何指导将不胜感激。

【问题讨论】:

【参考方案1】:

您描述的登录流程是正确的。

可以使用 ITfoxtec.Identity.Saml2 包和 ASP.NET Core Identity 构建身份提供程序。我已经多次使用 ITfoxtec.Identity.Saml2 包实现身份提供程序。 但是你需要意识到实施一个安全的解决方案,它需要完成,否则你会给黑客留下很多可能性:)

new EntityId("https://localhost:44342/Saml2") 是您自己定义的身份提供者 ID。

指向 ASP.NET Core 身份提供程序示例应用程序的链接 https://github.com/ITfoxtec/ITfoxtec.Identity.Saml2/tree/master/test/TestIdPCore。但是,示例应用程序没有使用 ASP.NET Core 标识。

【讨论】:

我将您的库用于相同目的,它适用于 Asp.net Identity(不使用 IdentityServer)。现在我对如何为我们的站点(服务提供商)生成元数据感到困惑,因为我没有使用 IdentityServer。这是我可以使用其他工具生成的东西吗?该应用程序还支持多租户,其中每个租户都由子域标识。那么在这种情况下如何创建元数据文件呢? 你可以像github.com/ITfoxtec/ITfoxtec.Identity.Saml2/blob/master/test/…这样生成SP元数据。您需要加载单独的租户配置以生成多租户元数据。 谢谢,就像你说的租户之间的区别会发生(假设这是正确的方法)是SP的发行者将是他自己的域,如tenant1.domain.com、tenant2/tenant3等。所以基于域协议绑定的url会发生变化(可以使用你的代码完成的方式)。但是在 .CreateMetadata().ToActionResult() 会引发错误 [Value cannot be null。 (参数“证书”)]。我的 appsettings 和你的 appsettings.json 很相似。你有 //"SignatureValidationCertificateFile": "xxx.cer" 评论。这里可能有什么问题? 问题可能是你需要提供config.SigningCertificate。并将其添加到 entityDescriptor.SPSsoDescriptor.SigningCertificates。

以上是关于SAML 与 ASP.NET Core 身份的集成的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net mvc Web 应用程序中集成第三方应用程序的 SAML SSO

Asp net core 和 Firebase 身份验证

ASP.Net-Core 中的自定义身份验证

ASP .NET Core 身份服务器默认登录页面为 Microsoft

如何使用 ASP.NET Core 3.1 将 Android 应用程序集成到 Identity Server 以进行身份​​验证?

具有混合身份验证 JWT 和 SAML 的 ASP.NET Web API 2.2 OWIN