Хто з них безпечніший і чому?
Обидва вони безпечні, це залежить від середовища, яким ви користуєтесь.
Я не бачу причини, чому додатковий крок (код авторизації обміну на маркер) додається в одному робочому потоці, коли сервер може безпосередньо видавати маркер доступу.
Це просто. Ваш клієнт не захищений. Давайте розберемося в деталях.
Подумайте, що ви розробляєте програму проти 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