【Azure Storage Account】利用App Service作为反向代理后续 ---- 隐藏 SAS Token

简介: 本文介绍了如何通过App Service作为反向代理,将SAS Token追加到请求URL中,以避免直接在代码或配置文件中存储SAS Token带来的安全性和维护问题。具体步骤包括修改App Service的web.config Rewrite规则,将SAS Token添加到转发的URL中;并在.NET SDK中仅使用不包含SAS Token的Uri进行Blob操作。这样既提高了安全性,也简化了SAS Token的管理。

问题描述

前文提要:【Azure Storage Account】利用App Service作为反向代理, 并使用.NET Storage Account SDK实现上传/下载操作

在前几天的实验中,使用了App Service作为反向代理,把默认的存储账号的域名修改为自定义的域名后,在 .NET Storage Account SDK中实现常规的上传/下载操作。

 

后面,想到需要把SAS Token直接写入代码中,就算是使用配置文件来保存SAS Token,也会存在如下问题:

1)安全性问题,如果SAS Token被泄漏呢?

2)SAS Token需要频繁的更改,难道每一次更改都需要重启应用吗?

 

想要避免这样的问题,是否可以在反向代理中,把SAS Token的内容追加在新的URL中呢?

 

问题解答

经过试验,是可以的。

在.NET Storage Account SDK中的BlobServiceClient对象,使用Uri作为构造函数参数,代码中并没有解析这个Uri中的验证参数信息,它通过直接传递到Storage Account服务。

基于这个判断,是可以把SAS Token信息隐藏,然后通过反向代理添加在后端转发的请求中。而在SDK中,只需要一个带blob name 或container name的Uri就可以了。

 

对以上方案修改的步骤有二:

第一步:修改 App Service 的 web.config Rewrite规则

在 rewrite action 的 url 中,直接把SAS Token内容添加在 {R:1} 参数之后。

注意:一定要把( &) 符号 替换为 ( & ), 否则会因为 web.config 中的内容格式不对导致 App Service 报错 500  

<configuration>  
<system.webServer>  
<rewrite>  
 <rules>  
  <rule name="root" stopProcessing="true">  
   <match url="^/?(.*)" />  
    <action type="Rewrite" url="https://****.blob.core.chinacloudapi.cn/{R:1}?sv=2022-11-02&amp;ss=bfqt&amp;srt=sco&amp;sp=rwdlacupitfx&amp;se=2025-03-08T14:52:33Z&amp;st=2025-03-08T06:52:33Z&amp;spr=https&amp;sig=***********" appendQueryString="true" />
  </rule>  
 </rules>  
</rewrite>  
</system.webServer>  
</configuration>

 

第二步:在SDK中去掉 Uri 中的SAS Token

////Use SAS URL  
  
//string accountsas = "https://<the app gateway domain name>/?sv=2022-11-02&*****https&sig=PxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxD";
//修改为,如使用App Service,则为:https://xxxxxxxxxxxxxxx.chinacloudsites.cn/
string accountsas = "https://<the app gateway domain name>/";
Uri sasuri = new Uri(accountsas); 
BlobServiceClient blobServiceClient = new BlobServiceClient(sasuri);

代码执行结果:

 

 

参考资料


【Azure Storage Account】利用App Service作为反向代理, 并使用.NET Storage Account SDK实现上传/下载操作: https://www.cnblogs.com/lulight/p/18745481

 

相关文章
|
4月前
|
Java 应用服务中间件 API
【App Service】部署War包到Azure云上遇404错误
Java应用部署至Azure App Service for Windows后报404,本地运行正常。经排查,日志提示类文件版本不兼容:应用由Java 17(class file version 61.0)编译,但环境仅支持到Java 11(55.0)。错误根源为Java版本不匹配。调整App Service的Java版本至17后问题解决,成功访问接口。
225 1
|
4月前
|
存储 Linux 网络安全
【Azure App Service】Root CA on App Service
Azure App Service for Windows应用连接外部SSL服务时,需确保其证书由受信任的根CA颁发。多租户环境下无法修改根证书,但ASE(单租户)可加载自定义CA证书。若遇证书信任问题,可更换为公共CA证书或将应用部署于ASE并导入私有CA证书。通过Kudu的PowerShell(Windows)或SSH(Linux)可查看当前受信任的根证书列表。
127 13
|
5月前
|
API 网络架构 容器
【Azure Container App】查看当前 Container App Environment 中的 CPU 使用情况的API
在扩展 Azure Container Apps 副本时,因 Container App Environment 的 CPU 核心数已达上限(500 cores),导致扩展失败。本文介绍如何使用 `az rest` 命令调用 Azure China Cloud 管理 API,查询当前环境的 CPU 使用情况,并提供具体操作步骤及示例。
194 16
|
5月前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
177 1
|
5月前
|
网络协议 Java Linux
【App Service】在Azure环境中如何查看App Service实例当前的网络连接情况呢?
在 Azure App Service(Windows 和 Linux)中部署应用时,分析网络连接状态是排查异常、验证端口监听及确认后端连接的关键。本文介绍如何在 Linux 环境中使用 `netstat` 命令查看特定端口(如 443、3306、6380)的连接情况,并解析输出结果。同时说明在 Windows App Service 中 `netstat` 被禁用的情况下,如何通过门户抓包等替代方法进行网络诊断。内容涵盖命令示例、操作步骤及附录说明,帮助开发者快速掌握云环境中的网络分析技巧。
158 11
|
4月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
909 139
|
4月前
|
移动开发 JavaScript weex
UniApp开发的App在启动速度方面有哪些优势和劣势?
UniApp开发的App在启动速度方面有哪些优势和劣势?
448 137
|
4月前
|
数据采集 JavaScript 前端开发
开发比分App?你缺的不是程序员
开发体育比分App,关键不在代码,而在懂体育、懂数据、懂用户。明确定位、理清需求、选好数据源,再找专业的产品、数据与技术人才协同,才能少走弯路。程序员最后入场,效率最高。
309 154
|
5月前
|
移动开发 小程序 Android开发
基于 uni-app 开发的废品回收类多端应用功能与界面说明
本文将对一款基于 uni-app 开发的废品回收类多端应用,从多端支持范围、核心功能模块及部分界面展示进行客观说明,相关资源信息也将一并呈现。
204 0

热门文章

最新文章