День добрый.
XSRF (он же CSRF) ключ генерируется и сохраняется на стороне сервера (вероятно, в сессии), это нормально, но для этого и нужен.
Логика скрипта должна быть такой:
1. Скрип получает страницу авторизации
2. Берет значение XSRF-поля
3. Отправляет все данные для авторизации.
Все это должно делаться в рамках одной сессии скрипта.
Попробуйте объект curl перед отправкой данных авторизации создать новый. Из вашего кода создается ощущение, что вы используете один и тот же объект и для получения данных и для отправки данных авторизации.
Ну и в панели разработчика Хрома или Firefox проверьте - точно ли отправляются только эти 3 поля или сервер "ждет" еще какое-то поле, значение которого генерируется через JS. Проверить просто - отключите JS и попробуйте авторизоваться на сайте.