Моя задача состоит в том, чтобы загрузить картинку в API через реагировать на нативную.Аутентификация выполняется AWS, но без использования Cognito.Поэтому я запрашиваю роль через aws.sts.requestRoleWithSAML, которая работает до сих пор.Теперь я подписываю свой запрос с помощью ключа AWS Signature Version 4 Key, используя модуль «aws4-реагировать-нативный», а затем отправляю запрос на извлечение сообщений в API.Но я просто не могу заставить его работать.Я получаю сообщение об ошибке:
"Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой секретный ключ доступа AWS и метод подписи. Подробности см. В документации по обслуживанию."
Так что, возможно, я здесь что-то не так делаю, но что я действительно не понимаю, так это тот факт, что я получил полностью рабочий пример Python.
Может быть, кто-то может помочь мне с этой проблемой или просто может предоставить мне информацию о том, как преобразовать часть Python в javascript для RN.
Python-код:
client = boto3.client('sts')
temp_credentials = client.assume_role_with_saml(
RoleArn='xxxxxx',
PrincipalArn=''xxxxx',
SAMLAssertion=saml_response)
auth = AWSRequestsAuth(
aws_access_key=temp_credentials['Credentials']['AccessKeyId'],
aws_secret_access_key=temp_credentials['Credentials']
['SecretAccessKey'],
aws_host='xxxxx',
aws_region='us-east-1',
aws_service='execute-api',
aws_token=temp_credentials['Credentials']['SessionToken'])
URL = 'xxxxx'
files = {'picture': open('IMG_20180326_193921.jpg', 'rb')}
header = {
"version_code": "1",
"crop": "MAIZE",
"device_locale": "US",
"date": "20180427_173034",
"peat_id": "200001",
"user_id": "fakeid25-e6a2-4e0c-9514-ccf429973af5",
"pla_id": "fakeid05-19ab-4896-b748-e1c1ab99b1a9",
"pic_id": "fakeidee-752f-42f0-a4e7-3e3e6fed9d76",
"images_captured": "1",
"images_uploaded": "0",
"latitude": "10.15",
"longitude": "10.15",
"accuracy": "364",
"file_name": "my-photo.tif",
"app_locale": "US",
"email": "some.person@pioneer.com",
"user_name": "username",
"confidence": "HIGH",
"severity": "HIGH",
"identifier": "Fake Image",
"notes": "Blah blah blah"
}
response = requests.post(URL, files=files, headers=header, auth=auth)
Реактивный код:
const data = new FomrData();
data.append('picture', { uri: 'path/to/test.jpg', name: 'test.jpg',
type: 'image/jpg' });
let temp = data.Credentials
let keyID = temp.AccessKeyId
let secretKey = temp.SecretAccessKey
let st = temp.SessionToken
var opts = {
host: 'xxxxx',
path: '/image_analysis',
region: 'us-east-1',
service: 'execute-api',
headers: {
'Host': 'xxxxx',
'version_code': '1',
'crop': 'MAIZE',
'device_locale': 'US',
'date': '20180427_173034',
'peat_id': '200001',
'user_id': 'fakeid25-e6a2-4e0c-9514-ccf429973af5',
'pla_id': 'fakeid05-19ab-4896-b748-e1c1ab99b1a9',
'pic_id': 'fakeidee-752f-42f0-a4e7-3e3e6fed9d76',
'images_captured': '1',
'images_uploaded': '0',
'latitude': '10.15',
'longitude': '10.15',
'accuracy': '364',
'file_name': imgname,
'app_locale': 'US',
'email': 'some.person@pioneer.com',
'user_name': 'username',
'confidence': 'HIGH',
'severity': 'HIGH',
'identifier': 'Fake Image',
'notes': 'Blah blah blah',
'X-Amz-Date': '20180518T133558Z',
},
method: 'POST',
body: data
}
fetch('https://xxxx', aws4.sign(opts, { secretAccessKey: secretKey,
accessKeyId: keyID, sessionToken: st }))
.then(response => {res.text().then(t => console.log(t))});
Это просто показывает выборку, вызов учетных данных работает нормально.
Надеюсь, кто-нибудь может помочь мне здесь!