无法构建 IdentitySaml2 项目

Posted

技术标签:

【中文标题】无法构建 IdentitySaml2 项目【英文标题】:Cannot build IdentitySaml2 projects 【发布时间】:2019-07-01 03:39:50 【问题描述】:

我正在尝试使用 IdentitySaml2 实施 SSO 进行身份验证,但项目尚未构建。我正在使用 .net 框架 4.7.2。

更新:虽然我无法构建主要源解决方案 (ITfoxtec.Identity.Saml2)。我设法创建了一个示例站点并安装了 nuget 包。我还添加了 IdentityConfig、Authcontroller、DefaultClaimsAuthenticationManager 和视图等代码文件,并在 webconfig 中添加了以下设置。我不确定这些设置,也没有找到适当的文档。目前 idpmedatadata 由于不正确的 url 正在抛出异常。

<add key="Saml2:IdPMetadata" value="https://localhost:44305/metadata"/>
<add key="Saml2:Issuer" value="urn:itfoxtec:identity:saml2:testwebapp"/>
<add key="Saml2:SingleSignOnDestination" value="https://test-adfs.itfoxtec.com/adfs/ls/"/>
<add key="Saml2:SingleLogoutDestination" value="https://test-adfs.itfoxtec.com/adfs/ls/"/>
<add key="Saml2:SignatureAlgorithm" value="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<add key="Saml2:SigningCertificateFile" value="~/App_Data/itfoxtec.identity.saml2.testwebapp_Certificate.pfx"/>
<add key="Saml2:SigningCertificatePassword" value="!QAZ2wsx"/>
<add key="Saml2:CertificateValidationMode" value="ChainTrust"/>
<add key="Saml2:RevocationMode" value="NoCheck"/>

【问题讨论】:

【参考方案1】:

您能否更具体地说明例外情况?

如果您正在构建 ASP.NET MVC .NET 4.7.2 解决方案,您应该使用 ITfoxtec.Identity.Saml2.Mvc 版本 3.0.0 包。我希望它不在 .NET Core 应用程序中。

你可以找到她的例子:https://github.com/ITfoxtec/ITfoxtec.Identity.Saml2/tree/master/test

更新: 充当依赖方的 ITfoxtec Identity Saml2 组件可以使用或不使用 IdP 元数据进行配置。

使用 IdP 元数据

IdP 信任配置只需要元数据:

<add key="Saml2:IdPMetadata" value="https://localhost:44305/metadata"/>

IdP 元数据在 IdentityConfig.RegisterIdentity() 中加载,如下所示:

var entityDescriptor = new EntityDescriptor();
entityDescriptor.ReadIdPSsoDescriptorFromUrl(new Uri(ConfigurationManager.AppSettings["Saml2:IdPMetadata"]));
if (entityDescriptor.IdPSsoDescriptor != null)

    Saml2Configuration.SingleSignOnDestination = entityDescriptor.IdPSsoDescriptor.SingleSignOnServices.First().Location;
    Saml2Configuration.SingleLogoutDestination = entityDescriptor.IdPSsoDescriptor.SingleLogoutServices.First().Location;
    Saml2Configuration.SignatureValidationCertificates.AddRange(entityDescriptor.IdPSsoDescriptor.SigningCertificates);

else

    throw new Exception("IdPSsoDescriptor not loaded from metadata.");

元数据可以在线加载ReadIdPSsoDescriptorFromUrl(...)或从文件ReadIdPSsoDescriptorFromFile(...)或从字符串ReadIdPSsoDescriptor(...)

在没有元数据的情况下配置 IdP

IdP 信任需要 IdP 登录和注销端点以及 IdP 签名证书:

<add key="Saml2:SingleSignOnDestination" value="https://some-idp.test.com/login/"/>
<add key="Saml2:SingleLogoutDestination" value="https://some-idp.test.com/logout/"/>
<add key="Saml2:SignatureValidationCertificate" value="~/App_Data/IdP_signing_certificate.crt"/>

IdP 配置在IdentityConfig.RegisterIdentity() 中加载,如下所示:

Saml2Configuration.SingleSignOnDestination = new Uri(ConfigurationManager.AppSettings["Saml2:SingleSignOnDestination"]);
Saml2Configuration.SingleLogoutDestination = new Uri(ConfigurationManager.AppSettings["Saml2:SingleLogoutDestination"]);

Saml2Configuration.SignatureValidationCertificates.Add(CertificateUtil.Load(HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["Saml2:SignatureValidationCertificate"])));

信赖方标识符

unik 依赖方标识符:

<add key="Saml2:Issuer" value="urn:itfoxtec:identity:saml2:testwebapp"/>

签名证书

所需的签名算法很可能是 SHA-256:

<add key="Saml2:SignatureAlgorithm" value="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>

而不是从这样的文件中加载签名证书:

<add key="Saml2:SigningCertificateFile" value="~/App_Data/itfoxtec.identity.saml2.testwebapp_Certificate.pfx"/>
<add key="Saml2:SigningCertificatePassword" value="!QAZ2wsx"/>

可以通过 Windows 证书存储中的指纹或 Azure 应用服务中的 TLS 证书加载证书:

<add key="SigningCertificateThumbprint" value="XXXXX...XXXXX"/>

那么IdentityConfig.RegisterIdentity()需要改成通过指纹加载证书:

Saml2Configuration.SigningCertificate = CertificateUtil.Load(StoreName.My, StoreLocation.CurrentUser, X509FindType.FindByThumbprint, ConfigurationManager.AppSettings["Saml2:SigningCertificateThumbprint"]);

证书验证

如果需要,可以验证 IdP 证书链和吊销。

通常不验证证书链和吊销:

<add key="Saml2:CertificateValidationMode" value="None"/>
<add key="Saml2:RevocationMode" value="NoCheck"/>

需要验证证书链和撤销:

<add key="Saml2:CertificateValidationMode" value="ChainTrust"/>
<add key="Saml2:RevocationMode" value="Online"/>

【讨论】:

以上是关于无法构建 IdentitySaml2 项目的主要内容,如果未能解决你的问题,请参考以下文章

无法构建 gradle 项目

Xcode 10,不构建 pod 无法构建项目

做OCUnit,设置构建后测试为yes,项目无法构建成功

android:无法构建项目错误:无法从中读取包名

无法构建maven项目

由于缺少 KIF 类,项目无法构建