程序集中嵌入的PFX证书-运行时加载并获取安全密钥-不适用于IIS

时间:2018-06-20 23:33:13

标签: iis certificate jwt x509certificate2

我在一个应用程序的dll中嵌入了一个自签名pfx证书。我们使用此证书来签名我们的JWT令牌。我需要在运行时从程序集中加载该证书,并提取签名密钥以用于验证我的jwt令牌。

在我的开发机器上,我一切都运转得很好。

(注意:由于某些要求-我们不打算使用该证书的计算机或用户存储-我们希望将此证书保留在程序集中)

这是我用来从程序集中加载证书并获取签名密钥的代码

 X509SecurityKey signingKey = null;
 using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyApi.Certificate.pfx"))
 {
     var br = new BinaryReader(stream);
     var fileContents = br.ReadBytes((int)stream.Length);
     var certificate = new X509Certificate2(fileContents, ConfigurationManager.AppSettings["CertPassword"]);
     signingKey = new X509SecurityKey(certificate);
 }

然后在设置我的JWT承载身份验证时,我像这样使用此签名密钥...

app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AllowedAudiences = new[] { "my-api" },  

                TokenValidationParameters = new TokenValidationParameters
                {
                    AuthenticationType = "Bearer",
                    ValidIssuer = ConfigurationManager.AppSettings["TokenIssuer"],
                    ValidAudience = ConfigurationManager.AppSettings["Audience"],
                    NameClaimType = "sub",
                    RoleClaimType = System.Security.Claims.ClaimTypes.Role,
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = signingKey 
                }
            });

再次-所有这些都可以在开发机器上很好地工作。

但是,当部署到IIS时,我的JWT令牌未得到验证,并且我得到401未经授权。

我是否需要对IIS配置执行一些额外的步骤才能使它正常工作?

我看到的大多数示例都提到了有关设置证书权限的一些内容,以便IIS用户可以在用户/计算机存储中进行访问。但是,我没有将证书存储在用户存储或计算机存储中。它只是嵌入到装配体中。

0 个答案:

没有答案