Javascript 301重定向到azure存储blob时无意中传递了应用程序凭据
以前在过去的几个月里,我一直通过azure Web API的301重定向服务azure Blob。授权客户端可以通过承载令牌访问Web APIJavascript 301重定向到azure存储blob时无意中传递了应用程序凭据,javascript,azure,asp.net-core,storage,Javascript,Azure,Asp.net Core,Storage,以前在过去的几个月里,我一直通过azure Web API的301重定向服务azure Blob。授权客户端可以通过承载令牌访问Web API 客户访问myapp.azurewebsites.net/api/file/2 webapp为blob存储中的文件生成SASS url webapp将SASS url作为301重定向返回 客户端的浏览器遵循此操作并透明地下载文件 但是,最近在重定向之后,Azure Blob Api中出现了一个错误: InvalidAuthenticationInfo-身份
InvalidAuthenticationInfo-身份验证信息的格式不正确。检查授权标头的值。
这表明我的Web API承载令牌被无意中传递到blob存储,检查chrome中的网络选项卡,它确实在将凭据传递到azure blob存储
有没有办法让存储API忽略承载令牌而只在url中使用SASS密钥?
或者有没有办法防止301重定向将凭据泄漏到另一个域
ASP.Net核心:
[HttpGet]
public async Task<ActionResult> GetContent(string id)
{
//var sassUri = https://myblob.blob.core.windows.net/TEST?sv=2020-04-08&se=2021-04-07T13%3A16%3A15Z&sr=b&sp=r&sig=4WBAkWx
var sassURI = await _fileService.GetSASSForFileIdAsync(id);
return new RedirectResult(sassURI, true);
}
当然,您可以使用SAS URL请求存储API,请参阅 Azure存储支持三种类型的共享访问签名:
我相信如果你只是通过SAS并移除持票人代币应该会起作用
const myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');
myHeaders.append('Authorization', 'bearer 607cd0a9-6048'); //token for myapp
let resp = await fetch('https://myapp.azurewebsites.net/file/2',{ method: 'GET', headers: myHeaders});
//Network tab shows credentials are being leaked to myblob.blob.core.windows.net
console.log(resp);
private static Uri GetServiceSasUriForContainer(BlobContainerClient containerClient,
string storedPolicyName = null)
{
// Check whether this BlobContainerClient object has been authorized with Shared Key.
if (containerClient.CanGenerateSasUri)
{
// Create a SAS token that's valid for one hour.
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = containerClient.Name,
Resource = "c"
};
if (storedPolicyName == null)
{
sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddHours(1);
sasBuilder.SetPermissions(BlobContainerSasPermissions.Read);
}
else
{
sasBuilder.Identifier = storedPolicyName;
}
Uri sasUri = containerClient.GenerateSasUri(sasBuilder);
Console.WriteLine("SAS URI for blob container is: {0}", sasUri);
Console.WriteLine();
return sasUri;
}
else
{
Console.WriteLine(@"BlobContainerClient must be authorized with Shared Key
credentials to create a service SAS.");
return null;
}
}