- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WebJob,需要创建 JWT token 才能与外部服务通信。当我在本地计算机上运行 WebJob 时,以下代码有效:
public static string SignES256(byte[] p8Certificate, object header, object payload)
{
var headerString = JsonConvert.SerializeObject(header);
var payloadString = JsonConvert.SerializeObject(payload);
CngKey key = CngKey.Import(p8Certificate, CngKeyBlobFormat.Pkcs8PrivateBlob);
using (ECDsaCng dsa = new ECDsaCng(key))
{
dsa.HashAlgorithm = CngAlgorithm.Sha256;
var unsignedJwtData = Base64UrlEncoder.Encode(Encoding.UTF8.GetBytes(headerString)) + "." + Base64UrlEncoder.Encode(Encoding.UTF8.GetBytes(payloadString));
var signature = dsa.SignData(Encoding.UTF8.GetBytes(unsignedJwtData));
return unsignedJwtData + "." + Base64UrlEncoder.Encode(signature);
}
}
但是,当我将 WebJob 部署到 Azure 时,出现以下异常:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: NotificationFunctions.QueueOperation ---> System.Security.Cryptography.CryptographicException: The system cannot find the file specified. at System.Security.Cryptography.NCryptNative.ImportKey(SafeNCryptProviderHandle provider, Byte[] keyBlob, String format) at System.Security.Cryptography.CngKey.Import(Byte[] keyBlob, CngKeyBlobFormat format, CngProvider provider)
它说找不到指定的文件,但我传入的参数不是在查看文件位置,而是在内存中。根据我收集的信息,我可能需要启用某种加密设置才能使用 CngKey.Import 方法,但我在 Azure 门户中找不到任何与此相关的设置来配置。
我也尝试过使用 JwtSecurityTokenHandler,但它似乎无法处理我需要使用的 ES256 哈希算法(即使它在 JwtAlgorithms 类中被引用为 ECDSA_SHA256)。
如有任何建议,我们将不胜感激!
更新
看来 CngKey.Import 实际上可能试图将证书存储在 Azure 上无法访问的位置。我不需要存储它,因此如果有更好的方法来访问内存中的证书或将其转换为更易于使用的不同类型的证书,那么就可以了。
更新2
此问题可能与 Azure Web Apps IIS 设置未加载上述用户配置文件有关 here 。我通过在 Azure 门户应用程序设置中设置 WEBSITE_LOAD_USER_PROFILE = 1 来启用此功能。我在通过 Azure 中的 WebJob 和 Web 应用程序运行代码时尝试过此更新,但仍然收到相同的错误。
最佳答案
我使用反编译器来了解 CngKey.Import 方法实际上在做什么。看起来它试图将我正在使用的证书插入“Microsoft Software Key Storage Provider”。我实际上并不需要这个,只需要读取证书的值,但看起来不可能。
一旦我意识到证书被插入到机器某处的存储中,我就开始思考,如果你的 Azure Web 应用程序像它一样在共享环境中运行,那么从安全角度来看,这种想法会有多糟糕对于免费和共享层。果然,我的虚拟机位于共享层。将其扩展到基本层解决了这个问题。
关于azure - 如何在 Azure WebJob 上签署 JWT token 而不出现 CryptographicException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43349954/
我有一些数据要保护,所以我使用 ProtectedData 将其加密到文件中。当我尝试读取和解密数据时,我遇到了最奇怪的异常: CryptographicException - 无法更新密码。为新密码
解密 key 时出现错误: CryptographicException was unhandled by user code. Length of the data to decrypt is in
我有这段用于解密文件的代码,但如果我运行它,它会在 using 语句 using (CryptoStream .. .) { ... } public static void DecryptFile(
我正在使用 Thinktecture Identity 服务器并在 azure 中运行它。我遇到的问题是,有时当我读取联合元数据 XML 文件或登录时,我会收到此 Keyset does not ex
我正在使用 Thinktecture Identity 服务器并在 azure 中运行它。我遇到的问题是,有时当我读取联合元数据 XML 文件或登录时,我会收到此 Keyset does not ex
我在 Azure 网站中部署的 SignalR 中遇到了此异常。在调试环境下运行良好。它是 SignalR 1.0.1,我使用 .NET MVC 和 WebApi The data protectio
我正在尝试使用 .NET 中的 RijndaelManaged 类来加密文本字符串。但是,我不断收到 CryptographicException(“要解密的数据长度无效”)。此消息并不是很有帮助,尤
我连接到一个外部 Web 服务,该服务在 2018 年 5 月中旬之前一直完美无缺地运行。突然间,我开始收到带有消息“格式错误的 XML 签名”的 CryptographicException。我的调
每次我将我的 Blazor 服务器项目发布到我的网站域并打开该网站时,都会发生此异常,谷歌搜索几乎没有帮助: 它说 AppState.cs: line 21,所以这是它的代码行: 调试本地主机时不会发
加载站点核心站点的默认页面时遇到问题。日志错误如下: System.Security.Cryptography.CryptographicException 未处理 Message=系统找不到指定的路
我有一些代码可以调用使用 X.509 认证保护的第三方 Web 服务。 如果我直接调用代码(使用单元测试),它就可以正常工作。 部署后,将通过 WCF 服务调用此代码。我添加了第二个调用 WCF 服务
public RSAKeyPair() { string keyContainerName="pEncKey" CspParameters cspp = new
我正在尝试在 C# 中使用 RSA 加密和解密数据。我有以下 MSTest 单元测试: const string rawPassword = "mypass"; // Encrypt string p
我有一个 .p12 证书文件,我这样创建我的证书: var certificate = new X509Certificate2(certFileLocation, "mySecret", X509K
您好,感谢您的帮助。我们试图让 Sitecore 站点在 WS 2008 R2 标准服务器上正常运行,但一直遇到以下异常: System.Security.Cryptography.Cryptogra
我有一个托管在 Azure 上的 Identity Server Web 应用。它的根目录中有一个用于签名的 .pfx 文件。问题是,当新发布时它工作得很好,但一段时间后它开始抛出Cryptograp
我正在使用 Xamarin 创建 Monodroid 应用程序。 我与后端的通信是通过 https 协议(protocol)进行的。这会导致 Debug模式下出现“System.Security.Cr
在我的 ASP.NET WebForms 应用程序中 (如果重要的话,该应用程序在 windows server 2008 R2、IIS 7.5 和 Runtime v4.0 集成模式应用程序池上运行
我有一个使用 RSACryptoServiceProvider 使用已知私钥(存储在变量中)解密一些数据的应用程序。 当 IIS 应用程序池配置为使用网络服务时,一切运行正常。 但是,当我们配置 II
尝试启动 Docker 桌面应用程序时出现此错误。我尝试卸载并重新安装 Docker。 最佳答案 我不得不删除凭据管理器中的 Docker 主机文件系统访问记录。 关于Docker System.Se
我是一名优秀的程序员,十分优秀!