Передача «shopify_access_token» в заголовке моего запроса к конечной точке API из веб-приложения ShopifyPython

Программы на Python
Anonymous
Передача «shopify_access_token» в заголовке моего запроса к конечной точке API из веб-приложения Shopify

Сообщение Anonymous »

У меня есть встроенное приложение Shopify, которое использует мой магазин. Приложение — это всего лишь внешний интерфейс, и у меня есть несколько приложений-функций Azure для размещения различных API-интерфейсов приложения.
В этом приложении-функции у меня есть вспомогательный файл, который будет брать заголовки из запросите и проверьте токен Shopify. Это сделано для того, чтобы запретить вызов конечных точек из любого места, кроме приложения Shopify.
authentication_helper.py

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

import os
import requests
import json

from azure.functions import HttpRequest, HttpResponse
from shared.log_helper import logger

INTERNAL_SECRET_KEY = os.getenv('INTERNAL_SECRET')

def verify_shopify_token(domain: str, token: str) -> bool:
try:
response = requests.get(f'https://{domain}/admin/shop.json', headers={'X-Shopify-Access-Token': token})
return response.status_code == 200
except requests.RequestException:
return False

def shopify_auth_required(func):
def wrapper(req: HttpRequest):
logger.info("Incoming headers: %s", req.headers)
logger.info("Incoming params: %s", req.params)

# Check for internal secret key
internal_key = req.headers.get('X-Internal-Secret')
if internal_key == INTERNAL_SECRET_KEY:
return func(req)

# Perform Shopify authentication
domain = req.headers.get('X-Shopify-Domain') or req.params.get('domain')
token = req.headers.get('X-Shopify-Access-Token') or req.params.get('token')

if not domain or not token or not verify_shopify_token(domain, token):
response_content = json.dumps({'error': 'Unauthorized', 'message': 'You are not authorized to access this resource.'})
return HttpResponse(response_content, status_code=401, mimetype="application/json")

return func(req)
return wrapper
В моем внешнем веб-приложении я вызываю запрос, используя вызов ajax и передавая необходимые заголовки. Этот код приведен ниже:

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

  // --- Utility Functions --- //
const fetchAPI = (url, method, data, successHandler, errorHandler) => {
$.ajax({
url,
method,
contentType: "application/json",
dataType: "json",
headers: {
"X-Shopify-Domain": "{{ shopify_domain }}",
"X-Shopify-Access-Token": "{{ shopify_access_token }}"
},
data: JSON.stringify(data),
success: successHandler,
error: errorHandler,
});
};
Мне кажется, что это более безопасно с точки зрения API, поскольку только внешнее приложение может успешно вызывать конечные точки.
Однако я считаю, что это так открывает для меня другие проблемы, если кто-нибудь сможет получить X-Shopify-Access-Token из заголовка запроса.
Подходит ли это для добавления аутентификации в мой API?
Я старался избежать необходимости добавлять еще один процесс входа в систему для моего приложения Shopify, поскольку я уже вошел в свой портал администрирования Shopify, и это потребует значительного количества усилий. работа над реализацией.

Подробнее здесь: https://stackoverflow.com/questions/784 ... point-from

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