การรับรองความถูกต้องไม่ได้อยู่ในรูปแบบที่ถูกต้องเมื่อตั้งค่าคุณสมบัติบริการ Azure Blob (REST API)

ฉันกำลังพยายามตั้งกฎ CORS ในบัญชี Azure Blob Storage ของฉันโดยปฏิบัติตาม คำแนะนำเหล่านี้.

นี่คือข้อผิดพลาดที่ฉันได้รับหลังจากส่งคำขอ:

400 ข้อมูลการรับรองความถูกต้องไม่ได้ระบุไว้ในรูปแบบที่ถูกต้อง ตรวจสอบค่าของส่วนหัวการอนุญาต

URL คำขอ:

PUT https://[MyAccountName].blob.core.windows.net/?restype=service&comp=properties

ส่วนหัวของคำขอ:

x-ms-version: 2013-08-15
x-ms-date: Tue, 25 Feb 2014 13:02:00 GMT
Authorization: SharedKey
[MyAccountName]: [MyAccountKey]
Content-Length: 329
Host: [MyAccountName].blob.core.windows.net

เนื้อหาคำขอ:

<?xml version="1.0" encoding="utf-8"?>
<StorageServiceProperties>
    <Cors>   
          <CorsRule>
                <AllowedOrigins>http://www.example.com</AllowedOrigins>
                <AllowedMethods>GET</AllowedMethods>
                <ExposedHeaders>x-ms-meta-data*,x-ms-meta*</ExposedHeaders>
                <AllowedHeaders>x-ms-meta-target*,x-ms-meta*</AllowedHeaders>
                <MaxAgeInSeconds>200</MaxAgeInSeconds>
        </CorsRule>
    <Cors>
</StorageServiceProperties>

person kaques    schedule 25.02.2014    source แหล่งที่มา


คำตอบ (3)


คำขอมีส่วนหัวการให้สิทธิ์ที่ไม่สมบูรณ์ จำเป็นต้องมีรูปแบบการตรวจสอบสิทธิ์ ชื่อบัญชีพื้นที่จัดเก็บข้อมูล และลายเซ็น ตัวอย่างเช่น;

Authorization: SharedKey myaccount:Z1lTLDwtq5o1UYQluucdsXk6/iB7YxEu0m6VofAEkUE=

สำหรับข้อมูลเพิ่มเติม โปรดดูการรับรองความถูกต้องสำหรับ Windows Azure Storage Services ในทางกลับกัน หากคุณใช้ไลบรารีไคลเอ็นต์ Windows Azure Storage อันใดอันหนึ่ง มันจะจัดการการรับรองความถูกต้องให้กับคุณ สำหรับไลบรารี .NET โปรดดูแพ็คเกจ NuGet ของเรา

person Serdar Ozler    schedule 26.02.2014

สำหรับผู้ที่เข้าถึงหน้านี้และสงสัยว่าเหตุใดคุณจึงได้รับข้อผิดพลาดนี้แม้ว่าคุณจะใช้ URL ลายเซ็นการเข้าถึงที่ใช้ร่วมกัน แสดงว่าคุณน่าจะส่งโทเค็นแอปของคุณไปยัง Azure ตรวจสอบให้แน่ใจว่าไม่ได้รวมส่วนหัวการอนุญาตในกรณีนี้

person jsgoupil    schedule 19.01.2019
comment
ได้. ฉันกำลังเพิ่มส่วนหัวการรับรองความถูกต้องพื้นฐานจากสิ่งอื่นและพบสิ่งนี้ - person Paul; 24.01.2019

ตามสิ่งที่ @jsgoupil พูด:

สำหรับผู้ที่เข้าถึงหน้านี้และสงสัยว่าเหตุใดคุณจึงได้รับข้อผิดพลาดนี้แม้ว่าคุณจะใช้ URL ลายเซ็นการเข้าถึงที่ใช้ร่วมกัน แสดงว่าคุณน่าจะส่งโทเค็นแอปของคุณไปยัง Azure ตรวจสอบให้แน่ใจว่าไม่ได้รวมส่วนหัวการอนุญาตในกรณีนี้

ในกรณีที่คุณมี interceptor คุณสามารถเพิ่มการข้ามไปยังคำขอได้โดยทำตามคำแนะนำในโพสต์ stackOverflow นี้: https://stackoverflow.com/a/49047764/5232022

export const InterceptorSkipHeader = 'X-Skip-Interceptor'; // <-- ADD THIS

@Injectable()
export class SkippableInterceptor implements HttpInterceptor {

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // Add the following if to your interceptor
    if (req.headers.has(InterceptorSkipHeader)) {
      const headers = req.headers.delete(InterceptorSkipHeader);
      return next.handle(req.clone({ headers }));
    }

    ...  // intercept
  }

}

จากนั้นเมื่อใดก็ตามที่คุณต้องการข้ามการสกัดกั้นสำหรับคำขอเฉพาะ:

const headers = new HttpHeaders().set(InterceptorSkipHeader, ''); // <-- this will skip it

this.httpClient.get<ResponseType>(someUrl, { headers }) // <-- dont forget to add it here as well
person Daniel C    schedule 27.05.2020
comment
ขอบคุณ ฉันพบปัญหานี้ทุกๆ สองสามสัปดาห์ และมักจะลืมว่าปัญหาคืออะไร :) - person RichS; 30.07.2020