Я разработал сервер, который принимает файл CSV и записывает его в облаке, используя Python (соединение, колба) и Swagger. Все работало нормально, все запросы на завивку вернули 200, и файл был сохранен правильно.
Однако, поскольку я добавил аутентификацию по ключу API в файл yml, запросы на завивку всегда возвращались. эта ошибка:
{
"detail": "No authorization token provided",
"status": 401,
"title": "Unauthorized",
"type": "about:blank"
}
Для файла yml я использовал документацию swagger v2, и мне кажется, что все в порядке, поэтому я не понимаю, в чем проблема. Надеюсь, некоторые из вас смогут понять, почему это происходит.
Просьба:
curl --location 'http://localhost:5000/v1/public/function' \
--header 'x-api-key: apikey' \
--form 'key1="value1"' \
--form 'key2="value2"' \
--form 'key3="value3"' \
--form 'file=@"/path/to/file/file.csv"'
Файл YML:
swagger: "2.0"
info:
description: This is the swagger file that goes with our server code
version: "1.0.0"
title: Swagger REST Article
consumes:
- "application/json"
produces:
- "application/json"
securityDefinitions:
APIKeyHeader:
type: apiKey
in: header
name: x-api-key
basePath: "/v1"
paths:
/public/function:
post:
operationId: "file.function"
consumes:
- multipart/form-data
security:
- APIKeyHeader: []
parameters:
- in: formData
name: file
type: file
required: true
description: The file to upload.
- in: formData
name: key1
type: string
required: false
- in: formData
name: key2
type: string
required: false
- in: formData
name: key3
type: string
required: false
responses:
200:
description: "Successful request"
schema:
type: "string"
items:
properties:
response:
type: "string"
Сервер:
app = connexion.App(__name__, specification_dir='./')
CORS(app.app)
app.add_api('swagger.yml')
@app.route('/')
def home():
"""
This function just responds to the browser ULR
localhost:5000/
"""
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
Файл для аутентификации:
from connexion.exceptions import OAuthProblem
APIKEY_DB = {
"apikey": {
"uid": 1
}
}
def apikey_auth(apikey):
print(apikey)
info = APIKEY_DB.get(apikey)
print(info)
if not info:
print("Invalid token")
raise OAuthProblem('Invalid token')
print("Valid token")
return info
Подробнее здесь: https://stackoverflow.com/questions/793 ... if-the-swa
Запрос Curl возвращает ошибку 401: токен авторизации не предоставлен, даже если присутствует API-ключ Swagger. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение