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 协议对用户进行身份验证

没有 ASP.NET 身份的 .NET Core 外部身份验证

ASP.NET Core 中的 Jwt 令牌身份验证

ASP.NET Core Web API 身份验证

Cookie 身份验证 ASP.NET Core