Какой из них более безопасный и почему?
Они оба безопасны, это зависит от среды, в которой вы их используете.
Я не вижу причины, по которой дополнительный шаг (код авторизации обмена для токена) добавляется в один рабочий процесс, когда сервер может напрямую выдать токен доступа.
Это просто. Ваш клиент не защищен. Давайте посмотрим на это подробнее.
Предположим, что вы разрабатываете приложение против Instagram API
, поэтому вы регистрируете приложение Instagram
и определяете, какое API's
вам нужно. Instagram
предоставит вам client_id
иclient_secrect
На вашем веб-сайте вы создали ссылку, которая говорит. «Приходите и используйте мое приложение». При нажатии на это ваше веб-приложение должно сделать два звонка Instagram API
.
First
отправить запрос Instagram Authentication Server
с указанными ниже параметрами.
1. `response_type` with the value `code`
2. `client_id` you have get from `Instagram`
3. `redirect_uri` this is a url on your server which do the second call
4. `scope` a space delimited list of scopes
5. `state` with a CSRF token.
Вы не отправляетеclient_secret
, Вы не можете доверять клиенту (Пользователь и / или его браузер, которые пытаются использовать ваше приложение). Клиент может увидеть url или java скрипт и client_secrect
легко найти его . Вот почему вам нужен еще один шаг.
Вы получаете code
и state
. code
Здесь temporary
и не сохраняется где - либо.
Затем вы second
звоните Instagram API
(с вашего сервера)
1. `grant_type` with the value of `authorization_code`
2. `client_id` with the client identifier
3. `client_secret` with the client secret
4. `redirect_uri` with the same redirect URI the user was redirect back to
5. `code` which we have already received.
Поскольку вызов сделан с нашего сервера, мы можем безопасно использовать client_secret
(что показывает, как мы), code
что показывает, что пользователь выдал client_id
право использовать ресурс.
В ответ мы будем иметь access_token