programing

Azure 공유 액세스 서명 - 서명이 일치하지 않음

i4 2023. 4. 21. 20:13
반응형

Azure 공유 액세스 서명 - 서명이 일치하지 않음

다음 오류가 나타납니다.

<Error>
<Code>AuthenticationFailed</Code>
<Message>
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:6c3fc9a8-cdf6-4874-a141-10282b709022 Time:2014-07-30T10:48:43.8634735Z
</Message>
<AuthenticationErrorDetail>
Signature did not match. String to sign used was rwl 2014-07-31T04:48:20Z /acoustie/$root 2014-02-14
</AuthenticationErrorDetail>
</Error>

sas(Shared Access Signature)를 생성하여 컨테이너 uri의 끝에 있는 sas를 브라우저에 붙여넣으면 이 메시지가 나타납니다.생성된 sas의 풀주소는 다음과 같습니다.

https://acoustie.blob.core.windows.net/mark?sv=2014-02-14&sr=c&sig=E6w%2B3B8bAXK8Lhvvr62exec5blSxsA62aSWAg7rmX4g%3D&se=2014-07-30T13%3A30%3A14Z&sp=rwl

SO와 구글을 뒤지고 많은 조합을 시도했습니다.제가 모든 것을 올바르게 하고 있다는 것을 알 수 있는 한, 저는 잘 하고 있지 않다는 것을 알고 있습니다.그것은 보이지 않습니다.누군가 도와줬으면 합니다.

확실히 하기 위해 특정 블럽이나 루트 컨테이너가 아닌 컨테이너에 sas를 생성하고 있습니다.BLOB에 대한 액세스는 Public Blob으로 정의됩니다.최종 목표는 단순히 sas를 사용하여 컨테이너에 쓰기를 허용하는 동시에 SharedAccessBlobPolicy에 대한 대부분의 권한을 추가하는 것입니다.debugging'하는 것입니다.

컨테이너 이름의 시작과 끝에 \를 추가해 보았습니다.변화가 없다.

SAS를 생성하는 데 사용하는 코드는 다음과 같습니다.

    var blobClient = storageAccount.CreateCloudBlobClient();
    //Get a reference to the blob container 
    var container = blobClient.GetContainerReference(containerName);

    // Do not set start time so the sas becomes valid immediately.
    var sasConstraints = new SharedAccessBlobPolicy 
    {
        SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(30), 
        Permissions = SharedAccessBlobPermissions.Write 
        | SharedAccessBlobPermissions.Read
        | SharedAccessBlobPermissions.List,
    };

    var sasContainerToken = container.GetSharedAccessSignature(sasConstraints);

    //Return the URI string for the container, including the SAS token.
        var sas = string.Format("{0}{1}", container.Uri.AbsoluteUri, sasContainerToken);
        Logger.Debug("SAS: {0}", sas);
        return sas;

시그니처가 생성되지만 유효한 시그니처가 아닌 것 같습니다.

다른 컨테이너를 시험해 보고 액세스 정책을 변경했습니다.시작 시각과 관계없이 유효기간을 12시간 이상으로 연장했습니다(UTC+10 시간대입니다).무엇을 변경해도 같은 "시그니처가 일치하지 않았습니다" 오류가 발생합니다.

나는 심지어 'WindowsAzure'의 이전 버전을 사용해 보았다.스토리지'를 사용하여 4.2와 4.1을 시도했습니다.다른 브라우저에서 uri를 시도해봤자 별 차이가 없을 것 같은데...

제안해주시면 대단히 감사하겠습니다:-)

단답:

더하다comp=list&restype=container이 에러는 표시되지 않습니다.

장황한 답변:

기본적으로 Azure Storage Service는 SAS URL에서 액세스하려는 리소스가 BLOB인지 컨테이너인지 식별할 수 없으며 BLOB로 간주합니다.리소스 유형이 BLOB인 것으로 가정하기 때문에 이 경우$rootSAS 계산용 BLOB 컨테이너(오류 메시지에서 확인할 수 있습니다).SAS가 계산된 이후markblob container, 이거 알아?Signature Does Not Match에러. 지정함으로써restype=container스토리지 서비스에서 리소스를 다음과 같이 처리하도록 지시하고 있습니다.container.comp=list는 REST API 사양에 따라 필요합니다.

@Gaurav Mantri Answer에 추가하여 권한을 다시 확인하기 위해 Azure Portal에서 자신의 SAS 토큰을 만들 수도 있습니다.

여기에 이미지 설명 입력

서 알 수 요.comp=list&restype=container

다음과 같이 제공할 수 있는 리소스 유형:

  1. 컨테이너.
  2. 물건
  3. 서비스

이게 누군가에게 도움이 되길..

이것에 많은 시간을 소비한 후, 실제 에러는 .net 컴파일러에 의해 발생한 예외와는 다릅니다.스토리지에 blob 파일을 업로드 할 때 메타데이터 데이터 필드를 사용하는 경우 메타데이터 문자를 확인하십시오.예를 들어 설명, 파일 이름 등의 메타데이터 필드를 추가합니다.설명 필드에는 런타임 문자열 텍스트 뷰어에서 찾은 정크 문자가 몇 개 있습니다.

"test file description"이라는 설명을 변경한 후 원래 설명 > test file description을 사용합니다.잘 되고 있어요.

메타데이터 값은 다른 소스에서 추출한 것으로, 왜 정크 문자를 취득했는지에 대해 설명합니다.메타데이터 값을 삭제/수정해 주세요.그러면 정상적으로 동작합니다.

언급URL : https://stackoverflow.com/questions/25038429/azure-shared-access-signature-signature-did-not-match

반응형