Я интегрировал свое приложение Angular с AWS Cognito, используя amazon-cognito-identity-js version 3.2.0"
.
Во время разработки и тестирования на моей локальной машине оно работает нормально. Я получаю три вида токенов с сервера, то есть accessToken, idToken и refreshToken, и эти токены работают хорошо.
Я создал точно такой же код, используя ng build --prod
, и развернул его в корзину S3. Даже сейчас я получаю аналогичные 3 токена, однако при последующих вызовах сервер выдает ошибку:
400 Bad Request","error":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\nInvalidArgument
Недопустимый заголовок авторизации - требуется только один '' (пробел) Авторизация
Я проверил и нигде не могу добавить никакого дополнительного пространства. Я сохранил свои 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))
);
}