ASP.Net 核心 SAML 身份验证

ASP.Net Core SAML authentication

我正在尝试将 SAML 2.0 身份验证添加到 ASP.Net 核心解决方案。我找不到关于这个主题的任何文档,所以我不确定从哪里开始。那里可能有文档,但我不想花 3 天时间成为这方面的专家。

据我所知 ASP.Net Core 对旧 OWIN assemblies/namespaces 进行了一些更改。有第三方库可以简化 SAML 2.0 的实施,例如 Kentor.AuthServices.

我不确定如何将它与 ASP.Net 5 RC 1 / ASP.Net 核心结合起来。例如,使用 SQL.

中的 AspNet* 表

ASP.Net 5 RC 1 带有几个库来实现身份验证(客户端)。

例如:

实现这些是在 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 示例项目会自动显示 login/manage 帐户的社交按钮:

在后端代码中,使用 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 身份验证?

据我所知,ASP.NET Core 没有 SAML2 实现。我计划为 Kentor.AuthServices 制作一个 ASP.NET 核心中间件(我是维护者),但这只是计划而已。

https://github.com/KentorIT/authservices/pull/489 现在有一个 ASP.NET 核心中间件的工作原型。添加测试后,它将包含在正式版本中。

同样重要的是要知道,虽然这样的中间件与 ASP.NET 核心安全模型兼容,但它只能 运行 在完整的 .NET Framework 上,而不是在 .NET Core 上。原因是 System.IdentityModel 中的 SignedXml 和 SAML2 支持在 .NET Core 中尚不可用。

ITfoxtec Identity Saml2 现在支持.NET Core 2.1。

项目:https://itfoxtec.com/IdentitySaml2 and code samples: 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/

这可能基本上是 Anders Abel 答案的更新版本,但是:

我用了https://github.com/Sustainsys/Saml2。他们有一个名为 "Sustainsys.Saml2.AspNetCore2".

的 nuget 包,下载量为 36k

他们有一个有用的示例 .net 核心应用程序使用它,这里也使用 .net 核心身份:https://github.com/Sustainsys/Saml2/tree/master/Samples/SampleAspNetCore2ApplicationNETFramework(查看他们的 startup.cs 以及他们的外部登录剃刀页面以实现详情)。

他们还在此处举办了一个不错的 IdP 测试:https://stubidp.sustainsys.com。这样,您就可以确认您应用的 ACS(断言消费者服务)端点与您的登录页面以及诸如此类的东西一起工作。

他们在 github 中提到:"The library was previously named Kentor.AuthServices."

对于 ASP.NET 核心站点,您可以尝试此 SSO connector 解决方案。我将此连接器安装为单独的 .NET 应用程序(代理应用程序),它处理我的 ASP.NET 核心应用程序的 SSO 请求,然后我使用一些代码将此连接器与我的应用程序集成。所有必需的集成代码都已经存在于连接器本身中,我只是将其复制并粘贴到我的应用程序中。添加 SSO 的设置非常简单。我认为此连接器对于在 ASP.NET 核心应用程序中添加 SSO 非常有用。