无法建立IdentitySaml2专案

时间:2019-02-07 04:24:22

标签: itfoxtec-identity-saml2

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

更新:尽管我无法构建主要的源解决方​​案(ITfoxtec.Identity.Saml2)。我设法创建了一个示例站点并安装了nuget软件包。我还添加了诸如IdentityConfig,Authcontroller,DefaultClaimsAuthenticationManager和视图之类的代码文件,并在webconfig中添加了以下设置。我不确定这些设置,也找不到适当的文档。当前idpmedatadata由于网址不正确而引发异常。

<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 个答案:

答案 0 :(得分:0)

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

如果要构建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

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

使用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"/>