Cái nào an toàn hơn và tại sao?
Cả hai đều an toàn, nó phụ thuộc vào môi trường bạn đang sử dụng nó.
Tôi không thấy lý do tại sao một bước bổ sung (mã ủy quyền trao đổi mã thông báo) được thêm vào trong một luồng công việc khi máy chủ có thể trực tiếp phát hành Mã thông báo truy cập.
Nó đơn giản. Khách hàng của bạn không an toàn. Chúng ta hãy xem chi tiết.
Hãy xem xét bạn đang phát triển một ứng dụng Instagram API
, vì vậy bạn đăng ký APP Instagram
và xác định những API's
gì bạn cần. Instagram
sẽ cung cấp cho bạn client_id
vàclient_secrect
Trên trang web của bạn, bạn thiết lập một liên kết mà nói. "Hãy đến và sử dụng ứng dụng của tôi". Nhấp vào ứng dụng web này của bạn sẽ thực hiện hai cuộc gọi đến Instagram API
.
First
gửi yêu cầu Instagram Authentication Server
với các tham số dưới đây.
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.
Bạn không gửiclient_secret
, Bạn không thể tin tưởng khách hàng (Người dùng và trình duyệt của anh ta đang cố sử dụng ứng dụng của bạn). Máy khách có thể xem tập lệnh url hoặc java và tìm thấy bạn client_secrect
dễ dàng. Đây là lý do tại sao bạn cần một bước khác.
Bạn nhận được một code
và state
. Đây code
là temporary
và không được lưu bất kỳ nơi nào.
Sau đó, bạn thực hiện second
cuộc gọi đến Instagram API
(từ máy chủ của bạn)
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.
Vì cuộc gọi được thực hiện từ máy chủ của chúng tôi, chúng tôi có thể sử dụng một cách an toàn client_secret
(cho thấy chúng tôi như thế nào) với code
điều đó cho thấy người dùng đã được cấp quyền client_id
sử dụng tài nguyên.
Đáp lại chúng ta sẽ có access_token