我有一个ASP.NET Core 1.1项目,使用Azure AD OpenID进行身份验证。在IIS Express和完整的IIS上,身份验证在我的开发箱(Windows 10)上运行正常。但是,当我将项目部署到我的服务器(Server 2008R2)时,在登录到Microsoft重定向站点之后,服务器会抛出此错误:
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10503:签名验证失败。密钥尝试:'Microsoft.IdentityModel.Tokens.X509SecurityKey,KeyId:VWVIc1WD1Tksbb301sasM5kOq5Q Internal.Cryptography.CryptoThrowHelper + WindowsCryptographicException:发生内部错误 在Internal.Cryptography.Helpers.OpenStorageProvider(CngProvider提供者) 在System.Security.Cryptography.CngKey.Import(Byte [] keyBlob,String curveName,CngKeyBlobFormat格式,CngProvider提供程序) 在System.Security.Cryptography.CngKey.Import(Byte [] keyBlob,CngKeyBlobFormat格式) at Internal.Cryptography.Pal.X509Pal.DecodePublicKey(Oid oid,Byte [] encodedKeyValue,Byte [] encodedParameters,ICertificatePal certificatePal) at Internal.Cryptography.Pal.CertificateExtensionsCommon.GetPublicKey [T](X509Certificate2 certificate,Predicate`1 matchesConstraints) 在Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PublicKey() 在Microsoft.IdentityModel.Tokens.CryptoProviderFactory.IsSupportedAlgorithm(String algorithm,SecurityKey key) at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(Byte [] encodedBytes,Byte [] signature,SecurityKey key,String algorithm,TokenValidationParameters validationParameters) at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token,TokenValidationParameters validationParameters)
当我从Azure收到令牌并将其插入JWT.io时,它会成功验证签名。
回顾一下:
它与我在服务器上的https证书有什么关系吗?在我的开发盒上,我使用的是使用PowerShell创建的自签名证书。在服务器上,我们有一个由go-daddy颁发的证书。
感谢您的帮助。
答案 0 :(得分:4)
当“CNG密钥隔离”Windows服务未运行时,也会发生此异常。
答案 1 :(得分:0)
问题是运行应用程序池的标识。权利不够高。