【发布时间】:2018-03-20 10:21:06
【问题描述】:
我想集成 SP 发起的 SAML 2.0 POST。此外,我需要生成服务提供商的元数据以将其共享给我的客户。请有人对此有任何想法。示例代码会更有帮助。
【问题讨论】:
标签: c# asp.net-web-api saml
我想集成 SP 发起的 SAML 2.0 POST。此外,我需要生成服务提供商的元数据以将其共享给我的客户。请有人对此有任何想法。示例代码会更有帮助。
【问题讨论】:
标签: c# asp.net-web-api saml
经过研究,我发现 Sustainsys.saml2 for C# Web API 是最好的选择,它几乎不需要编码,并且可以通过配置文件中的配置轻松集成。
因此,要实现该实现,您需要以下内容:
X509 证书,可以通过 cygwin 中的 openssl 工具生成。对于,您的网络应用程序。
用于进行身份验证的 ADFS 服务器
通过添加您为应用程序生成的 x509 证书,为您的应用程序生成 SAML 元数据。这是您可以轻松生成元数据的网站https://www.samltool.com/sp_metadata.php。
然后在 Web 配置文件中添加 SAML 的配置。有关更多信息,您可以访问https://github.com/Sustainsys/Saml2。
然后将此代码添加到控制器中的 index() 中
if (User.Identity.IsAuthenticated)
{
var ssotype = WebConfigurationManager.AppSettings["SSOType"];
if (!string.IsNullOrEmpty(ssotype) && ssotype == "onelogin")
{
var email = System.Security.Claims.ClaimsPrincipal.Current.Claims.FirstOrDefault(x => x.Type.Equals("User.email")).Value;
Session["loginUserId"] = email;
}
else
{
var email = System.Security.Claims.ClaimsPrincipal.Current.Claims.FirstOrDefault(x => x.Type.Equals("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress")).Value;
Session["loginUserId"] = email;
}
Response.Redirect("index.html",false);
}
else
{
String redirecturl = null;
var idp = Sustainsys.Saml2.Configuration.SustainsysSaml2Section.Current.IdentityProviders.FirstOrDefault();
var routevalues = new RouteValueDictionary();
routevalues.Add("idp", idp.EntityId);
redirecturl = "~/Saml2/SignIn?idp=" + HttpUtility.UrlEncode(idp.EntityId);
Response.Redirect(redirecturl,false);
}
【讨论】: