ASP.NET Core Azure AD OpenID - 生成服务器上的令牌签名验证失败

时间:2017-08-09 16:56:32

标签: asp.net azure asp.net-core-mvc jwt openid-connect

我有一个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时,它会成功验证签名。

回顾一下:

  • 开发框(iis express和iis)令牌签名验证成功
  • JWT.io调试站点,令牌和签名验证成功
  • 部署在服务器(iis 7.5)上的
  • 签名验证失败

它与我在服务器上的https证书有什么关系吗?在我的开发盒上,我使用的是使用PowerShell创建的自签名证书。在服务器上,我们有一个由go-daddy颁发的证书。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:0)

问题是运行应用程序池的标识。权利不够高。