Немного справочной информации,
Я создал интерактивный веб-сайт, на котором пользователи могут загружать изображения в S3. Я построил его таким образом, что загрузка изображения идет прямо из браузера в AWS S3 с использованием подписанного запроса (бэкэнд python django).
Теперь проблема в том, что пользователи хотят иметь возможность вращать изображение. I Точно так же я хотел бы, чтобы это было настроено так, чтобы запрос пользователя поступал прямо из браузера. Я создал функцию AWS Lambda и прикрепил ее к веб-API, который будет принимать запросы POST. Я тестировал, и у меня наконец-то все заработало. Функция принимает 2 входа, key
и rotate_direction
, которые передаются как переменные POST в веб-API. Они входят в функцию python в переменную event
. Вот простая лямбда-функция:
from __future__ import print_function
import boto3
import os
import sys
import uuid
from PIL import Image
s3_client = boto3.client('s3')
def rotate_image(image_path, upload_path, rotate_direction):
with Image.open(image_path) as image:
if rotate_direction == "right":
image.rotate(-90).save(upload_path)
else:
image.rotate(90).save(upload_path)
def handler(event, context):
bucket = 'the-s3-bucket-name'
key = event['key']
rotate_direction = event['rotate_direction']
download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
upload_path = '/tmp/rotated_small-{}'.format(key)
s3_client.download_file(bucket, key, download_path)
rotate_image(download_path, upload_path, rotate_direction)
s3_client.delete_object(Bucket=bucket, Key=key)
s3_client.upload_file(upload_path, bucket, key)
return { 'message':'rotated' }
Все работает. Итак, теперь моя проблема заключается в том, как обеспечить некоторую аутентификацию для этой системы? Информация о владельце каждого изображения находится на веб-сервере django. Хотя все изображения считаются «общедоступными», я хочу обеспечить, чтобы только владелец каждого изображения мог вращать свои собственные изображения.
С этим проектом я отважился выйти на новую территорию, отправляя запросы контента прямо из браузера. Я мог понять, как я могу контролировать доступ, отправляя только POST-запросы с веб-сервера, где я мог подтвердить право собственности на изображения. Возможно ли, чтобы запрос исходил из браузера?