2016-10-05 19 views
1

私の個人的なAzureストレージBLOBの共有アクセス署名を使用します。 Blobの有効期限を30分に設定し、メソッドGetSasForBlobUsingAccessPolicyを初めて呼び出すと、sasのURLが取得され、同じメソッドを同じBLOBで2回目(30分以内)呼び出すと、異なるsasが取得され、どちらも有効です。なぜ彼らは違いますか?それが期限切れでないなら同じものを得ることは可能ですか? sasが期限切れになり、同じsasを取得すると、有効期限を延長することは可能ですか?有効期限内の異なるSAS

ここに私の関連するメソッドは、次のとおりです。

public void SetBlobContainer(string containerName) 
{ 
    string connectionString = string.Format(@"..."); 
    string sharedAccessPolicyName = "my-policy"; 

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString); 

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

    CloudBlobContainer container = blobClient.GetContainerReference(containerName); 

    container.CreateIfNotExists(); 

    _blobContainer = container; 

    if (!_blobContainer.GetPermissions().SharedAccessPolicies.ContainsKey(sharedAccessPolicyName)) 
    { 
     CreateSharedAccessPolicy(sharedAccessPolicyName); 
    } 
} 

public string GetSasForBlob(CloudBlockBlob cloudBlockBlob) 
{ 
    string sasToken = cloudBlockBlob.GetSharedAccessSignature(new SharedAccessBlobPolicy() 
    { 
     SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(30), 
    }, "my-policy"); 
    return string.Format(CultureInfo.InvariantCulture, "{0}{1}", cloudBlockBlob.Uri, sasToken); 
} 

答えて

1

は、なぜ彼らが異なっていますか?それが期限切れでないなら同じものを得ることは可能ですか?

GetSharedAccessSignatureメソッドを呼び出すたびに、別のSASが取得されます。異なる時間にメソッドを呼び出したため、それぞれの開始時間と終了時間が異なりますが、同じアクセス権と他のSASパラメータを持つ可能性があります。

あなたはブロブの共有アクセス署名の任意の数を生成することができます。コールが時間的に同じである(そうは思われない)ような連続したコールでなければ、それぞれはユニークになります。

SASはBLOBと一緒には保存されません。これは、SASパラメータ(有効期限、権限、リソースなど)と署名を含む生成されたトークンです。署名部分は、有効な間にSASを使用して行われた要求を認証するために使用されます。

だから、SASが有効であることを間隔内GetSharedAccessSignatureを呼び出すことにより、同じSASを生成することはできません。あなたはいつも新しいSASを手に入れます。しかし、それらが有効である間隔は、あなたがそれを扱う際に見つけたように、重複する可能性があります。

sasが期限切れになっても同じsasを取得できたら、有効期限を延長することはできますか?

SASの有効期限を延長する必要がある場合は、BLOBコンテナに保存されたアクセスポリシーを作成し、その有効期限を変更することができます。ただし、を変更してからまでSASを期限切れにする必要があります。有効期限が切れた場合は、新しいSASを作成する必要があります。ドキュメントから

は、ここに保存されたアクセスポリシーの定義です:

保存されたアクセスポリシーがリソースコンテナ上で定義されている - ブロブコンテナ、テーブル、キュー、またはファイル共有 - および管理するために使用することができます1つ以上の共有アクセス署名の制約。 SASに格納されたアクセスポリシーを関連付けると、SASは、格納されたアクセスポリシーに対して定義された開始時間、有効期限、およびアクセス権の制約を継承します。

そして:

が保存されたアクセスポリシーのパラメータを変更するには、新しい開始時間を指定して、既存のポリシーを置換するには、リソースタイプのアクセス制御リストの操作(例えば、CloudBlobContainer.SetPermissions)を呼び出すことができます、期限切れの時間、または一連のアクセス許可。たとえば、既存のポリシーでリソースへの読み取りと書き込みのアクセス権が付与されている場合は、それを変更して今後のすべての要求に対して読み取りアクセス権のみを付与できます。この場合、IDフィールドで指定された新しいポリシーの署名済み識別子は、置き換えようとしているポリシーの署名済み識別子と同じになります。

アクセスポリシーを使用せずにSASを使用することはできますが、アクセスポリシーを使用しない限り、有効期限を延長することはできません。

詳細については、Controlling a SAS with a stored access policyおよびEstablishing a Stored Access Policyを参照してください。

関連する問題