Должна ли ссылка указывать на клиентское приложение SPA?
Если ваше «клиентское SPA-приложение» является единственным интерфейсом для конечных пользователей, тогда да: оно должно указывать на это. Некоторые люди используют отдельный сервер oauth2 / для проверки подлинности, но это не так, как здесь.
Клиентское приложение отправит POST-запрос к API с токеном проверки и электронной почтой пользователя.
Токена должно быть достаточно. Я бы не стал отправлять адреса электронной почты через URL.
Кроме того, как API должен знать ссылку на клиентское приложение (ссылка должна быть добавлена в электронном письме, и это делается API). Должен ли API хранить эту ссылку или клиент SPA должен отправить ссылку на подтверждение API при отправке запроса на регистрацию пользователя?
Оба выглядят как настоящие проекты. Если вы хотите, чтобы API полностью не знал о внешнем интерфейсе и поддерживал множество внешних интерфейсов, для меня будет иметь смысл, что клиент отправляет свои собственные конечные точки. Однако существует проблема безопасности: вы не хотите, чтобы произвольные клиенты регистрировали произвольные URL.
Если вы просто создаете один интерфейс, я не вижу проблем с API, который знает URL-адрес активации. Это также звучит так, как будто это будет легко изменить, если ваши требования изменятся позже.
Я не уверен, какое из 2-х решений лучше или есть лучшее решение, поэтому мой вопрос - какой подход лучше?
В конечном счете, это не так уж важно. Ни один из подходов не звучит так, будто вы действительно загоняете себя в угол. Либо у вас есть стандартная конечная точка, которая использует HTTP-запрос javascript для активации пользователя, либо у вас есть отдельная конечная точка, которая перенаправляет пользователя после активации. Оба будут работать.