В этом приложении-функции у меня есть вспомогательный файл, который будет брать заголовки из запросите и проверьте токен 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
Код: Выделить всё
// --- 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,
});
};
Однако я считаю, что это так открывает для меня другие проблемы, если кто-нибудь сможет получить X-Shopify-Access-Token из заголовка запроса.
Подходит ли это для добавления аутентификации в мой API?
Я старался избежать необходимости добавлять еще один процесс входа в систему для моего приложения Shopify, поскольку я уже вошел в свой портал администрирования Shopify, и это потребует значительного количества усилий. работа над реализацией.
Подробнее здесь: https://stackoverflow.com/questions/784 ... point-from