授权标头无效-仅需要一个''(空格)

时间:2019-11-07 16:50:48

标签: angular amazon-web-services amazon-s3 http-headers amazon-cognito

我使用amazon-cognito-identity-js version 3.2.0"将Angular应用程序与AWS Cognito集成。

在我的本地计算机上进行开发和测试时,它工作正常。我从服务器收到了三种令牌,即accessToken,idToken和refreshToken,这些令牌运行良好。

我使用ng build --prod构建了完全相同的代码,并将其部署到S3存储桶中。即使现在我也得到了类似的3个令牌,但是在随后的调用中,服务器抛出了错误:

400 Bad Request","error":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>InvalidArgument</Code><Message>Authorization header is invalid -- one and only one ' ' (space) required</Message><ArgumentName>Authorization</ArgumentName>

我已经检查过,也没有在哪里添加任何形式的额外空间的信息。我将userPoolIdclientId保存在environment.prod.ts文件中,它们没有多余的空间。

登录时,我正在致电https://mydomain-dev-static-backops.s3.my-region.amazonaws.com/assets/data/fake-booking.json

在应用程序中调用此方法时会引发错误,而如果在浏览器中命中相同的URL,则会返回所需的json。

我尝试查找一些与SO相关的问题,但它们无法解决我的问题。

有人可以指导吗。

编辑:以下是用于添加标题的代码

intercept(
    req: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    let fullReqUrl = '';
    if (req.url.indexOf('http://') > -1 || req.url.indexOf('https://') > -1) {
      return next.handle(req);
    } else {
      fullReqUrl = `${environment.baseUrl}${req.url}`;
    }
    const authToken = this.awsService.getAccessToken();

    let headers = req.headers;

    // set the auth token
    headers = headers.set('Authorization', authToken);

    const authReq = req.clone({ headers, url: fullReqUrl });

    return next.handle(authReq).pipe(
      map(res => res),
      catchError(err => this.handlerError(err))
    );
  }

0 个答案:

没有答案