我正在使用Azure门户为版本2的blob容器之一生成共享访问签名(SAS)。我正在尝试从需要SAS的前端上传文件。问题是SAS每天都在到期。是否可以使用代码自动更新SAS,或者可以使用Azure AD进行身份验证。 因此,基本上,我有一个前端,用户可以使用Azure AD登录,现在我想利用他的会话来允许他上载到Azure存储。正如他已经获得授权一样,我认为应该为他的会议即时生成SAS。
答案 0 :(得分:0)
共享访问签名对于为不应该具有帐户密钥的客户提供对存储帐户的有限权限很有用。
如果您是将数据写入存储帐户的人,请在服务器端进行操作。如果这样做,则可以验证用户是否已登录。如果是这种情况,请允许您的后端使用访问键之一(或者更好的是托管身份)在存储帐户中进行写入。
当然,您可以让您的前端从后端(例如,从API)请求SAS令牌。这可以简单地实现,例如使用Azure功能。 SAS令牌可以使用近期到期时间。最后,您仍将向可以访问前端的任何人开放存储帐户的一部分。
随着SAS的短期失效,它仅在短时间内有效。如果您无法引用存储的访问策略,则此做法尤其重要。近期到期时间还限制了可上传到Blob的时间,从而限制了可写入Blob的数据量。
来源:Using shared access signatures (SAS)
来自同一篇文章:
以下代码示例创建一个对Blob和文件服务有效的帐户SAS,并为客户端授予读取,写入和列出访问服务级API的权限。帐户SAS将协议限制为HTTPS,因此该请求必须使用HTTPS进行。
static string GetAccountSASToken()
{
// To create the account SAS, you need to use your shared key credentials. Modify for your account.
const string ConnectionString = "DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key";
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
// Create a new access policy for the account.
SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy()
{
Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write | SharedAccessAccountPermissions.List,
Services = SharedAccessAccountServices.Blob | SharedAccessAccountServices.File,
ResourceTypes = SharedAccessAccountResourceTypes.Service,
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
Protocols = SharedAccessProtocol.HttpsOnly
};
// Return the SAS token.
return storageAccount.GetSharedAccessSignature(policy);
}