Comments
A gatekeeper style proxy which can delegate endpoints and get requests to different aspects of the platform i.e. a download request may go straight to the datastore whereas a calculation may go straight to the API
Code
The following code demonstrates how to create a SAS that is valid for five minutes.
The GetSharedAccessReferenceForUpload method returns a SAS that can be used to upload a file to Azure Blob Storage.
public class ValuesController : ApiController
{
private readonly CloudStorageAccount account;
private readonly string blobContainer;
...
///
/// Return a limited access key that allows the caller to upload a file
/// to this specific destination for a defined period of time.
///
private StorageEntitySas GetSharedAccessReferenceForUpload(string blobName)
{
var blobClient = this.account.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(this.blobContainer);
var blob = container.GetBlockBlobReference(blobName);
var policy = new SharedAccessBlobPolicy
{
Permissions = SharedAccessBlobPermissions.Write,
// Specify a start time five minutes earlier to allow for client clock skew.
SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
// Specify a validity period of five minutes starting from now.
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5)
};
// Create the signature.
var sas = blob.GetSharedAccessSignature(policy);
return new StorageEntitySas
{
BlobUri = blob.Uri,
Credentials = sas,
Name = blobName
};
}
public struct StorageEntitySas
{
public string Credentials;
public Uri BlobUri;
public string Name;
}
}