【问题标题】:How should I implement SAMLP 2.0 in an ASP.NET MVC 4 service provider?我应该如何在 ASP.NET MVC 4 服务提供者中实现 SAMLP 2.0?
【发布时间】:2014-02-25 04:30:42
【问题描述】:

我正在用 C# 开发一个 MVC 4 Web 应用程序,并希望使用现有的 SAML 2.0 身份提供程序来处理登录。我正在使用HTTP POST bindingSimpleSAMLphp

看来,在 .NET 4.5 中,我应该使用 Windows Identity Foundation。首先,我尝试安装Identity and Access Tool。 (我使用的是Visual Studio 2013,它应该集成了这个工具,但是VS2013的版本doesn't support "re-entrancy",这意味着我不能用它来为我现有的应用程序添加WIF支持。)

将身份和访问工具指向我的身份提供者的元数据后,我收到以下错误消息:

显然,这是指示 SAMLP 2.0 is not supported by WIF 的错误消息。这似乎与受支持的 SAML 2.0 tokens 不同(至少,这个outdated documentation 表明存在Microsoft.IdentityModel.Tokens.Saml2 命名空间)。

然后我发现了 WIF Extension for SAML 2.0。然而,这是在 2011 年 5 月发布的,从那时起似乎就没有被触及过。尽管如此,我还是下载了扩展并尝试构建 ZIP 文件中包含的 SamlConfigTool。该工具是一个控制台应用程序,它告诉我:

此工具将提示您输入创建描述您的依赖方的元数据文件所需的信息。它将提示要下载的合作伙伴元数据文件的地址。最后,它将输出一个名为 Changes_To_Web_Config.xml 的文件,其中包含应对您网站的 web.config 文件进行的更改以启用 SAML 保护。

输入我的实体 ID 和 SAML 端点后,SamlConfigTool 立即崩溃。好吧,也许我不需要使用配置工具,我只需复制示例 ServiceProvider VS 项目中所做的事情。迁移后,我可以在 VS2012 中打开该项目,但我不清楚它是如何工作的——它似乎不包含任何 C# 代码,只是 Web.config 中的新条目。我不清楚我应该如何调整此配置来替换我的 MVC 4 应用程序中的自定义登录代码,并且无论如何依赖 3 年前的死库似乎不是一个好主意。

那么,在 ASP.NET MVC 4 中实现 SAML 2.0 的最佳方式是什么?我目前正在手动解码、编码、解析和压缩 XML,感觉应该有更简单的方法。

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc saml-2.0


    【解决方案1】:

    您说得对,WIF(现在移至核心 .NET 下 System.IdentityModel)仅支持 SAML2 令牌,而不支持实现服务商。

    Kentor.AuthServices 是基于 .NET 4.5 构建的 ASP.NET MVC 的开源 SP 实现。安装包并在 web.config 中添加一些设置 - 无需编码。

    免责声明:我是Kentor.AuthServices的作者

    【讨论】:

    • 我已安装 AuthServices 并将 [适当的部分][1] 添加到我的 Web.config,我的项目仍在构建中,但我无法让 AuthServices 执行任何操作。将[Authorize] 属性添加到我的ActionResult 似乎没有任何作用。
    • 试试yoursite/AuthService/SignIn。它应该开始登录(我显然需要用 MVC 的东西更新文档)。要获得自动重定向,请将身份验证模式设置为表单并将 loginUrl 设置为 ~/SignIn:msdn.microsoft.com/en-us/library/…
    • 您的意思是 AuthServices/SignIn 带有“S”
    【解决方案2】:

    据我所知,WIF 中尚不支持 SAML2P。我建议你自己实现它。

    您可以使用实现 SAML2P 的库并在您的 MVC 项目中使用它。您可以使用的一些库是OIOSAML.NET 或商业ComponentPro SAML

    或者有一个设置中间 IAM 的选项。在 MVC 中,您使用 ws-* 协议(在 Visual Studio 中实现的标准方式)将身份提供者设置为此中间 IAM。此 IAM 应配置为将您的身份验证消息中继到您要与 SAML2P 一起使用的 IDP。在对用户进行身份验证后,IAM 只会转换声明并发出您 MVC 应用程序信任的新令牌。尝试查看ShibbolethThinkTecture IdentityServer v2(但第二个没有实现 SAML2P,因此您必须自己添加支持)。或者您可以使用 ADFS2。

    【讨论】:

    • 至于第三方服务,还有支持samlp的Auth0
    • 据我所知.Net 4.5 确实支持 samlp:connect.microsoft.com/VisualStudio/feedback/details/781848/…
    • 调查中的这 39 个 ups 中的一个是我的 :) 我也想它是否会得到支持,但直到今天我还没有在 .NET 框架中发现官方引用它。但是 Azure 和 ADFS 支持它。
    • 为了充实@woloski 的评论,写了这个:nzpcmad.blogspot.co.nz/2015/04/…
    • @pepo FWIW,请参阅 cheated.by.safabyte.net,它显示 Component Pro 可能代表被盗 SAML 软件的最新版本。 TY
    【解决方案3】:

    http://www.nuget.org/packages/SAML2/ 怎么样?它说它是来自OIOSAML.NET 的叉子。

    【讨论】:

      【解决方案4】:

      你需要一个库,除非你想自己写。我一直在使用https://www.nuget.org/packages/ITfoxtec.Saml2.Mvc

      【讨论】:

      • 你觉得怎么样?我们正在评估不同的软件包,ITfoxtec 名列前茅
      • 我们现在已经在生产中了。请注意,ITFoxtec 此后进行了重写,我们仍在使用旧版本。由于我们特定 IdP 实现的具体情况,我们不得不做一些小的修改,所以最好有源代码可用。
      • 谢谢。很高兴知道。我喜欢它的许可证类型和开源代码。可能很快就会评估它的质量:)
      猜你喜欢
      • 1970-01-01
      • 2014-10-27
      • 2020-10-26
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      相关资源
      最近更新 更多