【发布时间】:2018-01-17 16:36:06
【问题描述】:
我有一个 ASP.NET Core 1.1 项目,使用 Azure AD OpenID 进行身份验证。身份验证在我的开发盒(Windows 10)上运行良好,在 IIS express 和完整 IIS 上。但是,当我将项目部署到我的服务器(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 provider) 在 System.Security.Cryptography.CngKey.Import(Byte[] keyBlob, CngKeyBlobFormat 格式) 在 Internal.Cryptography.Pal.X509Pal.DecodePublicKey (Oid oid, Byte[] encodedKeyValue, Byte[] encodedParameters, ICertificatePal certificatePal) 在 Internal.Cryptography.Pal.CertificateExtensionsCommon.GetPublicKey[T](X509Certificate2 证书,谓词`1 匹配约束) 在 Microsoft.IdentityModel.Tokens.X509SecurityKey.get_PublicKey() 在 Microsoft.IdentityModel.Tokens.CryptoProviderFactory.IsSupportedAlgorithm(字符串算法,SecurityKey 密钥) 在 System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(Byte[] encodedBytes, Byte[] 签名, SecurityKey key, String algorithm, TokenValidationParameters validationParameters) 在 System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(字符串令牌,TokenValidationParameters 验证参数)
当我从 Azure 收到令牌并将其插入 JWT.io 时,它会成功验证签名。
回顾一下:
- 开发盒(iis express 和 iis)令牌签名验证成功
- JWT.io 调试站点,令牌和签名验证成功
- 部署在服务器 (iis 7.5) 签名验证失败
这和我在服务器上的 https 证书有什么关系吗?在我的开发盒上,我使用的是用 powershell 创建的自签名证书。在服务器上,我们有一个 go-daddy 颁发的证书。
感谢您的帮助。
【问题讨论】:
标签: asp.net azure asp.net-core-mvc jwt openid-connect