Я делал в 2 вариантах
А)postMessage как вариант, слушаете события из друго окна.
Б) Можно через одноразовые токены:
1) отправляете запрос, получаете ссылку по которой нужно открыть окно и токен, по которому в будущем проверите прошёл ли пользователь аунтификацию, этот же токен можно указать в дп параметрах при ответе от сервера vk
2) открываете новое окно и через цикл проверяете window.closed, те ждёте когда закроется окно.
3) в окне пользователь проходит аутификацию и возвращается на колбек ссылку, в которой должен вернутся данные для получения токена, и ваш одноразовый токен, сервер должен ответить is-ом window.close() , получить все нужные данные от вк и сохранить в бы
4)фронтенд цикл улавливает изменение состояния window, и отправляете запрос с токеном на сервер , на сервере проверяете состояния аунтификации и создаёте сессию