403 Запрещено: отсутствует токен аутентификации для метода GET в шлюзе API AWSPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 403 Запрещено: отсутствует токен аутентификации для метода GET в шлюзе API AWS

Сообщение Anonymous »

Я новичок во всех этих вопросах REST API. Недавно я столкнулся с проблемой при попытке создать обработчик метода GET (403 Forbidden) и возвращаемым json-сообщением «Отсутствует токен аутентификации». Я использую AWS Gateway, Lambda Functions и DynamoDB. Функция POST, которая используется для создания элементов в БД, работает нормально. Это мой первый вопрос о переполнении стека, поэтому я мог разместить слишком много скриншотов.
Код:

Код: Выделить всё

import json
import boto3
from botocore.exceptions import ClientError
from decimal import Decimal

dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
buffer_table = dynamodb.Table('buffer')

def lambda_handler(event, context):
try:
print('Request event:', event)

if event.get('httpMethod') != 'GET':
return build_response(405, {'Error': 'Method Not Allowed'})

query_parameters = event.get('queryStringParameters')
if not query_parameters:
return build_response(400, {'Error': 'Query parameters are required'})

if 'message_id' not in query_parameters:
return build_response(400, {'Error': 'message_id is required'})
try:
message_id = int(query_parameters['message_id'])
except ValueError:
return build_response(400, {'Error': 'message_id must be a number'})

if 'user_id' not in query_parameters:
return build_response(400, {'Error': 'user_id is required'})
try:
user_id = int(query_parameters['user_id'])
except ValueError:
return build_response(400, {'Error': 'user_id must be a number'})

return get_message(message_id, user_id)

except Exception as e:
print('Error:', e)
return build_response(500, {'Error': 'Internal Server Error'})

def get_message(message_id, user_id):
try:
response = buffer_table.get_item(
Key={
'MessageID': message_id,
'UserID': user_id
}
)

if 'Item' not in response:
return build_response(404, {
'Error': f'Message with MessageID {message_id} and UserID {user_id} not found'
})

return build_response(200, {
'Operation': 'GET',
'Message': 'SUCCESS',
'Item': response['Item']
})

except ClientError as e:
print('DynamoDB Client Error:', e)
error_message = e.response.get('Error', {}).get('Message', 'Unknown error')
return build_response(500, {'Error': error_message})

class DecimalEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Decimal):
if obj % 1 == 0:
return int(obj)
else:
return float(obj)
return super(DecimalEncoder, self).default(obj)

def build_response(status_code, body):
return {
'statusCode': status_code,
'headers': {
'Content-Type': 'application/json'
},
'body': json.dumps(body, cls=DecimalEncoder)
}
Я пытался использовать другие примеры кода на GitHub, но все равно обнаружил ту же ошибку. Также дважды проверьте все разрешения IAM.

Подробнее здесь: https://stackoverflow.com/questions/793 ... pi-gateway
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»