0

먼저 기술 세부 정보가 필요합니다.ASP.NET Core 2.0 - Azure Storage에서 파일을 인증과 함께 전달하는 방법

내 응용 프로그램은 PDF를 생성하고 Azure 저장소에 개인 컨테이너에 저장합니다. 그러나 사용자가 인증 (내가 Azure AD B2C 사용)하고 개인 페이지로 이동하면 해당 PDF에 대한 링크를 표시해야합니다. 이제, 이러한 링크는 공개하지 않아야합니다, 그래서 내가 필요가 있다고 생각 : 무역 및 패스에서 파일을 요청하는)

1) 사용자를 정식하는 미들웨어의 일종 그가 링크

2

그런 종류의 액세스 할 때 응답에 대해

가장 좋은 방법은 무엇입니까? (성능도 고려)

나의 첫 번째 아이디어는 SAS 토큰을 사용하여 약 5-10 분 동안 시간을 ​​제한하는 것이었다. 그러나 사용자가 페이지를 열고 한 시간 동안 브라우저를 열어 둔 다음 다시 돌아와 PDF 링크를 클릭하면 어떻게 될까요?

+1

성능상의 이유로 SAS 토큰을 사용하는 것이 가장 좋습니다. 페이지로드시 blob URL을 생성하는 대신 API에 대한 링크를 생성하고 토큰을 생성 한 다음 리디렉션 응답을 전체 경로 (uri + 토큰)에서 azure 저장소로 반환하십시오. 이 방법을 사용하면 사용자가 얼룩에 대한 오래된 링크를 얻을 가능성이 없습니다. –

+0

. 내가 여기있을 수있는 유일한 문제는 사용자가 PDF에 대한 실제 링크를 가져 와서 이메일을 통해 보내는 경우입니다. 토큰이 만료되면 링크가 끊어집니다. 그렇지 않다면 기본적으로 공개적으로 사용할 수 있습니다. 그래서 다른 방법이있을 것이라고 생각했습니다. – alvipeo

+0

당신이 의도 한 행동이 무엇인지는 명확하지 않습니다. 어떤 방법을 사용하든 당신이 소개하는 것은 문제입니다. 사용자가 이메일을 통해 ** 비공개 ** 파일에 대한 링크를 보내야하는 이유는 무엇입니까? –

답변

1

@ Federico Dipuma에 동의합니다. 내 프로젝트 중 하나에서이 방법을 사용했습니다. 나는 내 코드를 공유하기 위해왔다.

생성 코드 SAS URL.

public string GetBlobSasUri(string containerName, string blobName, string connectionstring) 
{ 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionstring); 
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
    var container = blobClient.GetContainerReference(containerName); 
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName); 

    //Set the expiry time and permissions for the blob. 
    //In this case no start time is specified, so the shared access signature becomes valid immediately. 
    SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy(); 
    sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10); 
    sasConstraints.Permissions = SharedAccessBlobPermissions.Read; 

    //Generate the shared access signature on the blob, setting the constraints directly on the signature. 
    string sasContainerToken = blockBlob.GetSharedAccessSignature(sasConstraints); 

    //Return the URI string for the blob, including the SAS token. 
    return blockBlob.Uri + sasContainerToken; 
} 

웹 응용 프로그램의 URL로 리디렉션하십시오.

public ActionResult FileDownload() 
{ 
    string blobURL = GetBlobSasUri("blob name","container name", "connection string"); 
    return Redirect(blobURL); 
} 
관련 문제