我正在尝试按照these instructions在我的Azure Blob存储帐户上设置CORS规则。
这是我提出请求后收到的错误:
400未以正确格式提供身份验证信息。检查授权标题的值
请求网址:
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>
答案 0 :(得分:1)
请求的授权标头不完整。它需要包含身份验证方案,存储帐户名称和签名。例如;
Authorization: SharedKey myaccount:Z1lTLDwtq5o1UYQluucdsXk6/iB7YxEu0m6VofAEkUE=
有关详细信息,请参阅Authentication for the Windows Azure Storage Services。另一方面,如果您使用其中一个Windows Azure存储客户端库,它将为您处理身份验证。对于.NET库,请参阅我们的NuGet package。
答案 1 :(得分:1)
对于访问此页面并想知道为什么即使使用共享访问签名URL也会出现此错误的人,您很可能会将您的APP令牌发送到Azure。在这种情况下,请确保不包括Authorization标头。
答案 2 :(得分:1)
@jsgoupil所说的:
对于访问此页面并想知道即使使用共享访问签名URL为何也会收到此错误的人,您很可能会将您的APP令牌发送到Azure。在这种情况下,请确保不包括Authorization标头。
如果您有拦截器,则可以按照以下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