Non sono completamente sicuro di cosa intendi con questo
When I receive the request I want to verify the third party domain from which it originated - to ensure someone is not submitting requests pretending to be another domain.
Ad esempio, ecco la richiesta HTTP effettuata dal mio browser per caricare questa pagina:
GET /questions/196706/verify-the-requesting-domain HTTP/1.1
Host: security.stackexchange.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101
Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: ... snip ....
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Niente in là indica da quale dominio viene il mio browser web. Non sono nemmeno sicuro di sapere cosa significa.
Forse intendi che la tua API sarà accessibile da pagine servite da altri domini e vuoi estrarre l'intestazione Referrer:
?
Referer: https://my.domain.com/somepage
In entrambi i casi, l'architettura client-server di HTTP significa che non vi è alcuna sicurezza qui; il client può letteralmente mettere tutto ciò che vuole nella richiesta e il server non ha modo di verificare se è "corretto". In questo caso, l'utilizzo di HTTP o HTTPS non fa alcuna differenza.
Considera il seguente comando cURL che mostra che posso creare una richiesta HTTP con qualsiasi testo di intestazione che desidero e quindi inviarlo a qualsiasi server che desidero:
curl -X GET -H "Accept: text/html" -H "Referer: https://my.domain.com/somepage" https://someHostName/someEndpoint
Soluzione: mutuo-auth (aka "client auth") TLS
Sembra che la soluzione che stai cercando sia automatico TLS , progettato appositamente per forzare il client a dimostrare la sua identità prima che il server apra una connessione.
Ciò implicherebbe l'emissione di certificati per i tuoi clienti (proprio come con il tuo server), e quindi la configurazione del tuo server per accettare solo connessioni in entrata da certificati attendibili.