Blazor WebAssembly生产环境机密安全存储的官方支持最佳实践是什么
Blazor WebAssembly 生产环境机密存储最佳实践
前置说明
Blazor WASM属于纯客户端运行框架,所有代码、配置都会下载到终端用户的浏览器中,可通过调试工具直接提取,因此不存在能在客户端完全隐藏高敏感度机密的方案。你之前尝试的服务端侧的托管身份访问Key Vault、读取App Service环境变量的方案都不生效,是因为浏览器中的WASM进程和Azure App Service的服务端进程完全隔离,服务端的权限、环境变量不会同步到客户端。
核心准则
- 高敏感度机密(API Key、非公开API端口/地址)绝对不能下发到WASM客户端,所有客户端侧的存储方案(内存、LocalStorage、SessionStorage等)都可被用户读取,无保密能力
- Azure B2C Client ID属于公开客户端标识,本身允许暴露,无需做隐藏处理
落地实现方案
方案1:新增服务端代理层(最推荐)
在你当前部署的Azure App Service中添加一个轻量ASP.NET Core后端作为代理:
- 所有WASM客户端的API请求优先发送到该后端代理接口
- API Key、非公开API端口等机密全部存储在服务端,可直接通过App Service托管身份访问Azure Key Vault拉取,全程不会暴露到客户端
- 后端代理先校验请求携带的B2C Access Token有效性,确认是合法登录用户后,再携带API Key转发请求到Azure API Manager,拿到响应后回传给WASM客户端
方案2:直接改造API Manager鉴权逻辑
如果不想新增代理层,可调整API Manager的鉴权规则,完全移除API Key校验:
- 在API Manager入站策略中配置JWT校验规则,仅接受你的Azure B2C签发的有效AccessToken作为唯一鉴权凭证,无需额外传递API Key
- 若仍需要隐藏API Manager的访问地址,还是需要搭配服务端代理实现,无其他方案
公开配置处理
可公开的配置项(B2C租户信息、Client ID、后端代理地址等)可直接存放在wwwroot/appsettings.json中,不同部署槽的差异化配置可通过Azure App Service的静态文件重写规则,在客户端请求appsettings.json时动态注入对应环境的配置值,无需打包时区分环境。
内容的提问来源于stack exchange,提问作者Cameron Mostert
相关产品推荐
相关产品推荐

