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