Tuve que crear una API para mi aplicación Django para algo confidencial que no podía tener en un archivo Javascript público y estático. ¿Cómo puedo hacer que esta vista solo acepte solicitudes provenientes de mi propio sitio web y rechace cualquiera del "exterior" (si alguien copió mi solicitud a continuación, debería recibir un error)?
Si hay otros problemas de seguridad, menciónelos en su respuesta. Mi sitio web está alojado en Heroku.
La solicitud en mi archivo javascript:
var clientSecret = await fetch('https://url.com/api/', { method: 'POST', body: params, headers: { 'Content-Type': 'text/plain' }, }).then(r => r.json()) Mi vista de mi API ( https://url.com/api/ ):
from rest_framework.request import Request as RESTRequest from rest_framework.response import Response from rest_framework.decorators import api_view import requests @api_view(['POST']) def payment(request, *args, **kwargs): ... #define headers_in and params_in here response = requests.post('https://outboundapirequest.com/v1/request', headers=headers_in, data=params_in) return Response(response.json()['value'])Mediante el uso de ''intercambio de recursos de origen cruzado (CORS)''
En la configuración de Django, puede establecer una lista de todos los dominios donde se permite que se originen las solicitudes a su servidor API.
Al igual que
CORS_ALLOWED_ORIGINS = [ "http://localhost:8080", "http://127.0.0.1:9000" ]