Który z nich jest bezpieczniejszy i dlaczego?
Oba są bezpieczne, zależy to od środowiska, w którym go używasz.
Nie widzę powodu, dla którego dodatkowy krok (wymiana kodu autoryzacji na token) jest dodawany w jednym przepływie pracy, gdy serwer może bezpośrednio wystawić token Access.
To jest proste. Twój klient nie jest bezpieczny. Zobaczmy to szczegółowo.
Weź pod uwagę, że tworzysz aplikację przeciwko Instagram API, więc rejestrujesz swoją aplikację Instagrami określasz, której API'spotrzebujesz. Instagramzapewni Ci client_idiclient_secrect
Na swojej stronie internetowej ustawiasz link, który mówi. „Przyjdź i użyj mojej aplikacji”. Kliknięcie tej aplikacji internetowej powinno wywołać dwa wywołania Instagram API.
Firstwyślij zapytanie do Instagram Authentication Serverz poniższymi parametrami.
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.
Nie wysyłaszclient_secret , nie możesz zaufać klientowi (Użytkownikowi i / lub jego przeglądarce, która próbuje użyć Twojej aplikacji). Klient może zobaczyć adres URL lub skrypt java i client_secrectłatwo znaleźć plik. Dlatego potrzebujesz kolejnego kroku.
Otrzymujesz codei state. codeTu jest temporaryi nie jest zapisany w każdym miejscu.
Następnie seconddzwonisz do Instagram API(ze swojego serwera)
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.
Ponieważ połączenie jest wykonywane z naszego serwera, możemy bezpiecznie użyć client_secret(co pokazuje, jak jesteśmy), z codektórego pokazuje, że użytkownik zezwolił client_idna korzystanie z zasobu.
W odpowiedzi będziemy mieć access_token