Помимо того, что это требование Oauth2, client_secret необходимо использовать на этом этапе, чтобы убедиться, что вы действительно являетесь тем, на кого вы претендуете.
Все сводится к тому, почему процесс такой, какой он есть ...
«Код», который вы получаете по первому запросу, довольно слабый с точки зрения безопасности сам по себе. Он может быть перехвачен на обратном пути по ссылке перенаправления, которую я часто видел, переходя на целевые страницы без защиты SSL. Даже если вы на 100% HTTPS на своем сайте, все не совсем безопасно. Кто-то может найти код по просмотру URL-адресов запросов, которые регистрируются в журналах доступа вашего веб-сервера.
Даже если у вас есть самая жесткая среда безопасности на этой стороне Букингемского дворца, контролирующая доступ к вашим серверам, если вы работали на техническом родео более нескольких лет, вы знаете, что кто-то собирается в какой-то момент «заархивировать» ваш журналы где-то менее чем идеально в безопасности. Вероятно, на USB-ключе они оставили в Starbucks ...
Ничего не может быть, не избегайте этого, если вы используете поток API на стороне сервера. В отличие от Javascript, работающего внутри клиентского браузера, вы не можете добавить временный код после хеша, чтобы предотвратить его регистрацию, потому что клиенты браузера не отправляют что-либо после хеш-метки с запросом. JS может перехватить URL-адрес перенаправления и проанализировать содержимое после тега Hash, поэтому существует поток JS Oauth2, который просто возвращает access_token без дополнительного промежуточного кода песни и танца. Нет необходимости в Client_Secret на стороне JS, и это хорошо, так как это обычно вызывает недовольство, когда вы помещаете пароли и секретные ключи в javascript.
Теперь, чтобы предотвратить использование этого промежуточного кода злоумышленником для получения токена доступа, Client_ID и Client_Secret отправляются вместе, чтобы сервер API мог идентифицировать вас как того, кем вы себя называете, и у вас есть разрешение выкупить код для access_token. Ничто не сравнится с общим секретом!
Поскольку код имеет очень короткое окно использования до истечения срока его действия - в основном предназначенного для вас, чтобы выкупить его для немедленного доступа access_token - опасность того, что кто-то украдет код и попытается перебрать форсировку Client_Secret, не слишком велика.
Сочетание короткого окна использования и client_secret (более ssl, конечно) обеспечивает обмен данными с вашими учетными данными клиента