Если я правильно понимаю, ссылка для перенаправления должна указывать на ваш бэкэнд-сервер. Затем этот маршрут перенаправления на ваш внутренний сервер делает запрос к конечной точке Stripe на шаге 4.
Во многих случаях токен доступа и токен обновления сохраняются в базе данных для будущих запросов для этого пользователя. Эти токены являются очень конфиденциальной информацией, которую можно использовать для выполнения транзакций Stripe, поэтому лучше не показывать их в веб-интерфейсе.
Я тоже сначала запутался с вещами OAuth.
Ответ на вопрос редактора № 2:
На # 2 я не уверен, есть ли необходимость поразить ваш сервер перед отправкой первоначального запроса в Stripe. Эти кнопки «зарегистрироваться через ..» довольно часто имеют прямую ссылку на сервис. Таким образом, может быть кнопка <a>
, которая имеет что-то вроде href="https://connect.stripe.com/express/oauth/authorize?redirect_uri={URL}&client_id={ID}&state={STATE_VALUE}"
. STATE_VALUE
может быть сгенерировано, когда пользователь заходит на страницу.
Затем, когда пользователь нажимает кнопку, он переходит на страницу регистрации / входа в Stripe. Когда пользователь заканчивает заполнять форму, Stripe переводит пользователя на «redirect_uri». Здесь (# 5), я не совсем уверен, что вы подразумеваете под «Пользователь перенаправлен на страницу загрузки на моем конце». Я думаю, это URL вашего приложения, поэтому этот запрос должен попасть на ваш сервер. Страница, с которой только что пришел пользователь, не может получить и обработать ответ, если запрос не был сделан ajax. В случае Stripe похоже, что их поток предназначен для простых html-запросов. (Некоторые сервисы могут делать это через ajax, и в этом случае обработка кода выполняется во внешнем коде.)
Итак, именно ваш сервер получает код авторизации от Stripe. Сервер проверяет STATE_VALUE, отправляет POST-запрос на Stripe с кодом авторизации, получает секретные ключи / ключи обновления от Stripe. Затем сервер может ответить пользователю с помощью любой подходящей страницы.
Я полагаю, что ваш сервер мог бы сразу ответить перед выполнением последнего запроса POST, а внешний код мог сделать это через ajax и показать страницу загрузки во время выполнения запроса. Однако я не согласен с тем, что это хороший вариант; по моему мнению, он может раскрыть конфиденциальную информацию, и время загрузки недостаточно велико, чтобы быть плохим UX.
Итак, с точки зрения браузера,
Когда пользователь нажимает ссылку для входа в систему Stripe
-> делает запрос на страницу авторизации Stripe
-> получает страницу, содержащую форму от Stripe
Когда пользователь отправляет форму Stripe
-> делает запрос в Stripe для отправки формы
-> получает 302 от Stripe, перенаправляя на URL перенаправления вашего приложения (содержащий код авторизации)
-> делает запрос на ваш сервер
-> получает новую страницу с вашего сервера
Не стесняйтесь комментировать / исправить.