我在一个应用程序的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用户可以在用户/计算机存储中进行访问。但是,我没有将证书存储在用户存储或计算机存储中。它只是嵌入到装配体中。