我使用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>
我已经检查过,也没有在哪里添加任何形式的额外空间的信息。我将userPoolId
和clientId
保存在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))
);
}