Blazor WASM使用Cryptography.Algorithms报错及JWT生成方案咨询
Blazor WASM 加密API不支持问题解决方案
可落地的替代方案
- 采用纯托管实现的第三方加密库
优先选择无原生依赖的C#加密库,比如BouncyCastle.Cryptography纯托管版本、Blazored.JWT等,这类库完全通过C#代码实现AES、HMACSHA256等算法,不依赖.NET原生加密接口,不会抛出PlatformNotSupportedException异常。如果仅需要生成HS256签名的JWT,直接使用适配Blazor的JWT库可以省略底层加密逻辑开发,开箱即用。 - 通过JS互操作调用浏览器Web Crypto API
Blazor WASM支持和前端JS交互,你可以将HMACSHA256签名、AES加密的逻辑封装为前端JS方法,调用浏览器原生的window.crypto接口实现加密能力,再通过IJSRuntime在C#代码中调用对应方法获取结果。该方案使用浏览器原生优化的加密能力,性能优于纯C#托管实现,适合加密请求量较高的场景。 - 后端代理签发JWT(更安全的推荐方案)
HS256是对称签名算法,密钥如果明文存放在Blazor WASM客户端代码中会存在严重泄露风险,有条件的话建议后端新增一个轻量的JWT签发接口,客户端先请求该接口拿到签名完成的JWT,再携带JWT调用目标OpenAPI,从根源上规避客户端加密的需求,同时避免密钥泄露的安全隐患。
后续Blazor版本的支持规划
目前.NET官方尚未将System.Security.Cryptography下的对称加密、HMAC类API的Blazor WASM原生支持纳入短期固定发布计划。.NET 7及后续版本虽然逐步开放了部分加密API的WASM适配,但覆盖范围仍不包含你当前用到的AES、HMACSHA256等接口,短期内仍然建议使用上述替代方案实现需求。
内容的提问来源于stack exchange,提问作者otter otter
相关产品推荐
相关产品推荐

