У меня есть API-шлюз с двумя конечными точками:
- Тип авторизации -
NONE
.Делегаты в лямбду с именем fooLambda
. - Тип авторизации:
AWS_IAM
.
Предполагается, что клиент вызывает конечную точку 1 для получения учетных данных из fooLambda
, чтобы ониможет успешно вызвать конечную точку 2.
Я использую AWS Node.js SDK и модуль aws4
npm для подписания запросов AWS.Вот некоторый псевдокод для моего fooLambda
:
// get the role using this...
STS.assumeRole({
RoleArn: 'arn of my role that can call endpoint 2',
RoleSessionName: 'foobar',
})
// parse the sts creds like this....
const stsCredentials = STS.credentialsFrom(assumeRoleResponse)
// get a collection of signed headers like so
const signedHeaders = aws4.sign({
service: 'execute-api',
region: process.env.REGION,
}, {
secretAccessKey: stsCredentials.secretAccessKey,
accessKeyId: stsCredentials.accessKeyId,
sessionToken: stsCredentials.sessionToken,
}).headers;
// return the following headers to the client
return {
authorizationHeader: signedHeaders['Authorization'],
stsSecurityToken: signedHeaders['X-Amz-Security-Token'],
}
Теперь я намереваюсь, чтобы клиент мог присоединить эти два заголовка к своим запросам, чтобы они могли успешно вызвать конечную точку 2, но я получаю сообщение об ошибке, сообщающее, чтотокен безопасности недействителен, но я не уверен, почему.
ОБНОВЛЕНИЕ: Когда я использую тип авторизации подписи AWS Postman и предоставляю свои параметры accessKey, secretKey, региона aws, имени сервиса и токена сеанса - он создает авторизациюзаголовки и запрос к конечной точке 2 успешен!
После проверки сгенерированных почтальоном заголовков авторизации кажется, что заголовок авторизации имеет другую подпись.Теперь проблема в следующем: «Как почтальон генерирует правильный заголовок авторизации, а aws4 нет?»