Путь к файлу не открывается с токеном в заголовке мода - невозможно открыть файл S3 bucket - PullRequest
0 голосов
/ 08 апреля 2020

Я создал приложение REST API в Django REST. Через него вы можете загружать файлы на сервер, отмечать их и т. Д. c.

Я подключил ведро S3 AWS в качестве системы хранения. Проблема в. В приложении настроена аутентификация токена. Таким образом, вы можете загружать файлы только в случае аутентификации. НО, если вы хотите открыть файл (нажмите на ссылку json в отображаемых данных), вы должны отключить заголовок вашего мода токеном аутентификации, потому что в противном случае он портится при открытии и пытается ввести токен в постоянно. И это лучший вариант, чтобы по крайней мере открыть его таким образом, я должен был сделать корзину полностью опубликованной c.

Таким образом, реальность такова, что вы публикуете файлы с включенной аутентификацией токена. Вы можете получить доступ к API только с токеном авторизации. Но всякий раз, когда вы захотите открыть файл, вы должны отключить заголовок мода, в результате чего вы постоянно проверяете и снимаете флажок маркера заголовка мода, как идиот, если хотите просматривать файлы api + open. Кроме того, поскольку корзина опубликована c, любой может увидеть ваши файлы ... не идеально

REST API Сериализированные данные (это после публикации файла)

{
    "id": 25,
    "name": "Pokus",
    "date_uploaded": "2020-04-07T20:26:24.182297Z",
    "file": "https://asko-artinii-test.s3.amazonaws.com/user-files/Screenshot_2020-04-07_at_16.13.57.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAW2ZGA6SZX2DN2D5O%2F20200407%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20200407T211228Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=2025712679ed2c37e535e3bf95ef04934fde2becd72f4aab47ad8b024f0d9120",
    "tag": [
        2
    ],
    "visibility": "PRV",
    "description": "ss"
},

Вы видите во-первых, это безумно долго, а во-вторых, не работает с заголовком мода с включенным токеном.

Это ошибка, которую вы получаете (с токеном):

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>InvalidArgument</Code>
<Message>
Only one auth mechanism allowed; only the X-Amz-Algorithm query parameter, Signature query string parameter or the Authorization header should be specified
</Message>
<ArgumentName>Authorization</ArgumentName>
<ArgumentValue>Token 0a411ccab5176938b852d207b2eef676eb52b186</ArgumentValue>
<RequestId>10F00C90B358418A</RequestId>
<HostId>
dmWUqRvjxfEaOh0Mu1ISzVT4PYTxy3Bu5S4R8+wtIT+BX70XZXnomlvnDF2bpu0Ba0dAWVxwQ14=
</HostId>
</Error>

Мои вопросы:

  1. Есть ли способ заставить его игнорировать токен заголовка мода? где-то в конфигах ведра s3? Я имею в виду, что на данный момент все опубликовано c, поэтому никаких ограничений нет.
  2. Есть ли способ сделать его не опубликованным c и все же как-нибудь работать? У меня есть нормальное Django приложение, в котором мне не нужно было его публиковать c, и оно все еще работает (пользователь мог видеть их изображения), и мне не нужно было устанавливать для него ничего особенного.
  3. Есть ли просто лучший способ? Я не хочу, чтобы ведро публиковалось c вообще.

это мои settings.py:

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID_ARTTEST')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY_ARTTEST')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME_ARTTEST')
AWS_S3_REGION_NAME = "eu-central-1"

AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
...