Токены XSRF обычно являются файлами cookie в вашем домене, которые вы генерируете. Вы действительно не хотите вводить механизм, позволяющий другим сайтам устанавливать их. Проверка того, что сообщение приходит от доверенной стороны, лучше рассматривать как проблему проверки подписи.
Вы можете заставить каждый партнерский сайт генерировать и хранить личную / общедоступную подпись пару ключей. Затем они могут выслать вам свой открытый ключ.
Затем они могут подписать вам свои сообщения.
Так что их запрос будет выглядеть как
<script src="https://.../yourservice?partnerid=foobar&signedquerystring"></script>
и затем вы можете проверить подпись, чтобы подписанная строка запроса была правильно подписана с использованием открытого ключа, который вы искали по ключу foobar
.
Теперь вы знаете, что нужно доверять запросу, если он либо имеет ваш токен XSRF, либо подписан надлежащим образом с использованием личного ключа партнера, с которым вы установили отношения.
Это не помешает кому-то, кто может наблюдать, как вошедший в систему пользователь, просматривающий партнерский сайт, воспроизводит запрос, поэтому партнерский сайт и ваш сценарий должны загружаться через защищенный канал (https
), так же, как и вы. с многоразовыми токенами XSRF.