2014-05-13 3 views
2

Shared Access Signature에 대한 예제가 너무 많지만 코드에 무엇이 잘못되었는지 파악할 수 없습니다.SharedAccessBlobPolicy가 주어진 시간에 만료되지 않습니다. AZURE

내가하려는 것은 블롭에 대한 다운로드 가능한 링크를 만들어 사용자에게 보여 주려고하는 것입니다. 그리고 예제는 대개 어떻게 살아 있는지에 관한 것입니다. 나는 그것을 만료시키는 방법을 찾고있다.

다운로드 할 수있는 링크를 만들 수 있지만 작동하지만 주어진 시간에 만료되지는 않습니다. SharedAccessBlobPolicy을 만들고 SharedAccessExpiryTime 속성을 설정했지만 시간이 지나면 만료되지는 않습니다.

예를 들어 5 분으로 설정하면 30 분 후에도 계속 작동합니다.

SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy() 
        {     
         SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5), 
         Permissions = SharedAccessBlobPermissions.Read 
         }; 

여기 내 코드입니다 : 5 분 동안 작동하는

string blobName = "test.txt"; //just for an example 

CloudStorageAccount account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("myConnectionString")); 
CloudBlobClient client = account.CreateCloudBlobClient(); 


// Build shared access signature 
CloudBlobContainer container = client.GetContainerReference(ConfigurationManager.AppSettings.Get("myContainerReference")); 
container.CreateIfNotExists(); 


////Get a reference to a blob within the container. 

//Create a new stored access policy and define its constraints. 
SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy() 
       {     
        SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5), 
        Permissions = SharedAccessBlobPermissions.Read 
        }; 


//Get the container's existing permissions. 
BlobContainerPermissions permissions = new BlobContainerPermissions(); 

// The public access setting explicitly specifies that the container is private, 
// so that it can't be accessed anonymously. 
permissions.PublicAccess = BlobContainerPublicAccessType.Off; 

//Add the new policy to the container's permissions. 
string policyName = "myPolicy"; 

permissions.SharedAccessPolicies.Clear(); 
permissions.SharedAccessPolicies.Add(policyName,sharedPolicy); 
container.SetPermissions(permissions); 

CloudBlockBlob blob = container.GetBlockBlobReference(blobName); 
string sasBlobToken = blob.GetSharedAccessSignature(null, policyName); 
string downloadLink = blob.Uri + sasBlobToken; 

downloadLink을 생각하지만, 결코 죽지 않아. (나는 죽을 지 모르지만, 그것이 언제 죽는지를 모른다)

P. 여기서 전체 코드를 공유하지는 않습니다. 단지 디버그 오류 또는 다른 유형의 오류가 없습니다. 다운로드 링크로 완벽하게 작동합니다. 주어진 시간에 만료되지 않습니다.

내가 누락 된 부분을 파악하지 못했습니다. 관심을 가져 주셔서 감사합니다

+1

어리석은 질문 일 수 있지만 컴퓨터의 시계가 정확한지, 올바른 시간대로 설정되어 있습니까? (생성 된 타임 스탬프는 UTC이지만 시간대 차이로 인해 시계가 정확하다고 생각할 수 있습니다.) –

+1

방금 ​​시도한 결과 5 분 후에 링크가 만료되었습니다. 이 다운로드 링크를 어떻게 사용하는지와 같은 자세한 정보를 제공 할 수 있습니까? 또한 브라우저가 파일을 캐싱하지 않는지 확인하십시오. –

+0

@ GauravMantri 귀하의 테스트 및 제안 주셔서 감사, 언급 한 바와 같이, 그것은 캐싱 문제입니다. 그것은 다른 브라우저에서 시도 할 때 만료됩니다. 답변 섹션에 의견을 추가하려면 답변으로 확인하십시오. 감사합니다. – curiousBoy

답변

4

방금 ​​시도했는데 링크가 5 분 후에 만료되었습니다. 브라우저가 파일을 캐싱하지 않는지 확인하십시오. 그렇다면 모든 요청에 ​​대해 스토리지 서비스에서 가져 오지 않은 파일을 계속 볼 수 있습니다. 대신 브라우저 캐시에서만 제공됩니다.

+0

정확히 무슨 일이 있었는지입니다. 캐싱 문제. 감사 – curiousBoy

관련 문제