ASP.Net Core SAML 身份验证
Posted
技术标签:
【中文标题】ASP.Net Core SAML 身份验证【英文标题】:ASP.Net Core SAML authentication 【发布时间】:2016-05-19 11:00:33 【问题描述】:我正在尝试将 SAML 2.0 身份验证添加到 ASP.Net Core 解决方案。我找不到关于这个主题的任何文档,所以我不确定从哪里开始。那里可能有文档,但我不想花 3 天时间成为这方面的专家。
据我所知,ASP.Net Core 改变了旧的 OWIN 程序集/命名空间。有第三方库可以简化 SAML 2.0 的实现,例如 Kentor.AuthServices。
我不确定如何将其与 ASP.Net 5 RC 1 / ASP.Net Core 结合使用。例如在 SQL 中使用 AspNet* 表。
ASP.Net 5 RC 1 附带了几个库来实现身份验证(客户端)。
例如:
Microsoft.AspNet.Authentication.OAuth Microsoft.AspNet.Authentication.Facebook Microsoft.AspNet.Authentication.Google Microsoft.AspNet.Authentication.Twitter实现这些只是在Startup.cs
中调用一个简单的扩展方法:
app.UseIdentity()
.UseFacebookAuthentication(new FacebookOptions
AppId = "ID",
AppSecret = "KEY"
)
.UseGoogleAuthentication(new GoogleOptions
ClientId = "ID",
ClientSecret = "SECRET"
)
.UseTwitterAuthentication(new TwitterOptions
ConsumerKey = "KEY",
ConsumerSecret = "SECRET"
);
完成后,ASP.Net 示例项目会自动显示用于登录/管理帐户的社交按钮:
在后端代码中,使用var otherLogins = _signInManager.GetExternalAuthenticationSchemes().Where(auth => userLogins.All(ul => auth.AuthenticationScheme != ul.LoginProvider)).ToList();
检索身份验证提供程序。这意味着身份验证提供程序在某处注册,通过调用_signInManager.GetExternalAuthenticationSchemes()
使其可用。
如何在 ASP.Net 5 RC1 / ASP.Net Core 中实现 SAML 2.0 身份验证?
【问题讨论】:
看看github.com/IdentityServer/IdentityServer4。没有 SAML,但可能有一些线索? 您是否设法将 SAML2 实施到您的 aspnet 核心应用程序中?如果你这样做,我会喜欢一个例子...... 不,抱歉。跳过实施它并找到了另一个解决方案。 能否请您至少告诉我们解决方案名称 我最终使用 ASP.Net Identity 使用本地存储的用户。 【参考方案1】:据我所知,ASP.NET Core 没有 SAML2 实现。我打算为 Kentor.AuthServices 制作一个 ASP.NET Core 中间件(我是维护者),但这只是计划。
现在https://github.com/KentorIT/authservices/pull/489 有一个 ASP.NET Core 中间件的工作原型。添加测试后,它将包含在正式版本中。
同样重要的是要知道,虽然这样的中间件与 ASP.NET Core 安全模型兼容,但它只能在完整的 .NET Framework 上运行,而不能在 .NET Core 上运行。原因是 System.IdentityModel 中的 SignedXml 和 SAML2 支持在 .NET Core 中尚不可用。
【讨论】:
关于使 Kentor.AuthServices 支持 ASP.Net Core 的任何 ETA 吗? @TeddHansen 不幸的是,不能按时说什么。很大程度上取决于我是否会在空闲时间做这件事,或者我是否有付费客户以便我可以在办公时间做。 @Anders Abel 是否有任何已知的中间件可以在 asp.net 核心中实现 SAML2 SSO?? @Manu ComponentSpace 做到了。但是关于更精细细节的文档有点缺乏,而且它是一种付费产品。 从 Ander 的版本中获得了最新版本,它对 .Net Framework 有很强的依赖性。与纯核心环境不兼容。 :(【参考方案2】:ITfoxtec Identity Saml2 现在支持 .NET Core 2.1。
项目:https://itfoxtec.com/IdentitySaml2 和代码示例:https://github.com/ITfoxtec/ITfoxtec.Identity.Saml2/tree/master/test
要在 ASP.NET MVC Core 2.1 项目中实现 SAML 2.0,您需要以下 NuGet 包:https://www.nuget.org/packages/ITfoxtec.Identity.Saml2.MvcCore/
【讨论】:
【参考方案3】:这可能基本上是安德斯·阿贝尔答案的更新版本,但是:
我使用了https://github.com/Sustainsys/Saml2。他们有一个名为“Sustainsys.Saml2.AspNetCore2”的 nuget 包,下载量为 36k。
他们有一个有用的示例 .net core 应用程序使用它,它也在这里使用 .net 核心身份:https://github.com/Sustainsys/Saml2/tree/master/Samples/SampleAspNetCore2ApplicationNETFramework(查看他们的startup.cs
以及他们的外部登录剃须刀页面以了解实施细节)。
他们还在这里举办了一个不错的测试 IdP:https://stubidp.sustainsys.com。这样,您可以确认您的应用的 ACS(断言消费者服务)端点与您的登录页面等一起工作。
他们在自己的 github 上提到:“该库以前名为 Kentor.AuthServices。”
【讨论】:
【参考方案4】:对于 ASP.NET 核心站点,您可以尝试这个SSO connector 解决方案。我将此连接器安装为一个单独的 .NET 应用程序(代理应用程序),该应用程序正在处理我的 ASP.NET 核心应用程序的 SSO 请求,然后我使用一些代码将此连接器与我的应用程序集成。所有必需的集成代码都已经存在于连接器本身中,我只是将其复制并粘贴到我的应用程序中。添加 SSO 的设置非常简单。我认为这个连接器对于在 ASP.NET 核心应用程序中添加 SSO 非常有用。
【讨论】:
您好,欢迎来到 SO!请阅读tour 和How do I write a good answer? 例如您可以使用解决问题的解决方案添加代码sn-p。以上是关于ASP.Net Core SAML 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
具有混合身份验证 JWT 和 SAML 的 ASP.NET Web API 2.2 OWIN
ASP NET API - 在不打开 Microsoft 登录页面的情况下使用 Azure AD SAML 协议对用户进行身份验证