IDX10503:更新到Owin.Security v 4.0.0后签名验证失败(IDX10503:

2019-10-30 12:10发布

按主题,我更新了Owin.Security.WsFederation和相关的软件包到4.0版本,我得到的错误。

我没有做不是改变其他任何代码更改

using Microsoft.IdentityModel.Protocols; 

using Microsoft.IdentityModel.Protocols.WsFederation;

哪里是WsFederationConfiguration类似乎是现在的。

这里是我的StartupAuth:

public void ConfigureAuth(IAppBuilder app)
        {
            app.UseCookieAuthentication(
                new CookieAuthenticationOptions
                {
                    AuthenticationType = CookieAuthenticationDefaults.AuthenticationType
                });

            // Create WsFed configuration from web.config wsfed: values
            var wsconfig = new WsFederationConfiguration()
            {
                Issuer = ConfigurationManager.AppSettings["wsfed:Issuer"],
                TokenEndpoint = ConfigurationManager.AppSettings["wsfed:TokenEndPoint"],                
            };

            /* 
             * Add x509 certificates to configuration
             * 
             */
            // certificate.1 must always exist
            byte[] x509Certificate;
            x509Certificate = Convert.FromBase64String(ConfigurationManager.AppSettings["wsfed:certificate.1"]);
            wsconfig.SigningKeys.Add(new X509SecurityKey(new X509Certificate2(x509Certificate)));
            // certificate 2 may exist
            if (ConfigurationManager.AppSettings["wsfed:certificate.2"] != null)
            {
                x509Certificate = Convert.FromBase64String(ConfigurationManager.AppSettings["wsfed:certificate.2"]);
                wsconfig.SigningKeys.Add(new X509SecurityKey(new X509Certificate2(x509Certificate)));
            }
            // certificate 3 may exist
            if (ConfigurationManager.AppSettings["wsfed:certificate.3"] != null)
            {
                x509Certificate = Convert.FromBase64String(ConfigurationManager.AppSettings["wsfed:certificate.3"]);
                wsconfig.SigningKeys.Add(new X509SecurityKey(new X509Certificate2(x509Certificate)));
            }

            // Apply configuration to wsfed Auth Options
            var wsoptions = new WsFederationAuthenticationOptions
            {
                SignInAsAuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
                Configuration = wsconfig,
                Wreply = ConfigurationManager.AppSettings["wsfed:Wreply"],
                Wtrealm = ConfigurationManager.AppSettings["wsfed:Wtrealm"],
            };
            wsoptions.TokenValidationParameters.NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn";

            // Add WdFederation middleware to Owin pipeline
            app.UseWsFederationAuthentication(wsoptions);
        }

还有其它4.0需要的东西来验证签名? 我认为它在谈论从发行令牌的签名。 我没有看到如何启用ShowPII看到它在寻找什么键。

我使用MVC5与完整的框架。 不是核心。

更新

我试图修改使用由身份提供商在属性文件中提供的元数据来创建代码WsFederationConfiguration ,我仍然得到同样的错误。 我不知道签名是什么,或者我来自哪里,如果得到它它不是在IDP元数据。

UPDATE2:

下面是我做了使用由STS在属性文件中提供的wsfed元数据的变化。 (我已删除元数据编码的实际的base64,但不用说,这是你会得到相同的XML当你regest从发布它和端点的STS元数据正如我前面所说,我得到了同样的错误:

    public void ConfigureAuth(IAppBuilder app)
    {
        WsFederationConfiguration wsconfig;

        app.UseCookieAuthentication(
            new CookieAuthenticationOptions
            {
                AuthenticationType = CookieAuthenticationDefaults.AuthenticationType
            });

        var metaDataDocument = System.Text.Encoding.UTF8.GetString(
                Convert.FromBase64String("...c2NyaXB0b3I+"));

        using (var metaDataReader = XmlReader.Create(new StringReader(metaDataDocument), SafeSettings))
        {
            wsconfig = (new WsFederationMetadataSerializer()).ReadMetadata(metaDataReader);
        }

        // Apply configuration to wsfed Auth Options
        var wsoptions = new WsFederationAuthenticationOptions
        {
            SignInAsAuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
            Configuration = wsconfig,
            Wreply = ConfigurationManager.AppSettings["wsfed:Wreply"],
            Wtrealm = ConfigurationManager.AppSettings["wsfed:Wtrealm"],
        };
        wsoptions.TokenValidationParameters.NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn";

        // Add WdFederation middleware to Owin pipeline
        app.UseWsFederationAuthentication(wsoptions);
    }

Answer 1:

我曾与球队在MS的一些人。 这里的问题是,我们的STS使用SHA1签署令牌和weFederation的新版本不支持SHA1,因为它是不是安全的,并已被弃用。



Answer 2:

使用WIF与owin最简单的方法是通过联邦元数据的使用 (其中住在FederationMetadata / 2007-06 / FederationMetadata.xml)。 然后,你并不需要在所有安装任何在解释基于使用OWIN WsFederation中间件的Web应用程序配置要求 。 前提当然是你的STS发布一个有意义的FederationMetaData文件。 漂亮的优点是需要验证您的公共密钥会自动通过您的应用程序拾起(和更新它们无缝地完成)。

这是恕我直言,这是比你正在服用的方法要容易得多。

您可以按照OWIN WS联合身份提供的手动配置 ,因为它描述了比你更简单的方法。



文章来源: IDX10503: Signature validation failed after updating to Owin.Security v 4.0.0