Wątek przeniesiony 2024-01-18 18:11 z Webmastering przez Riddle.

Czy warto przekazać access i refresh token do skryptu na serwerze?

0

Mam prosty skrypt Pythonowy ktory chcę zrobić na remote serwerze który będzie odpalany raz dziennie. (odpali się i zakończy)

Skrypt potrzebuje skorzystać z 3rd party API - autoryzuje się do niej przez Oauth.

Na serwerze nie będę miał dostępu do przegladarki, więc myslę zrobić pierwszą autoryzacje lokalnie i przekleić uzyskany Access Token i Refresh Token do pliku na serwerze, z którego task będzie je wczytywał i zapisywał nowe przy każdym nowym odpaleniu.

Za każdym odpaleniem ponownym skrypt wczyta Refresh i Access token i na ich podstawie zrobi calle do API albo ewentualnie poprosi o nowe tokeny - i tak przy każdym odpaleniu

Czy jest coś złego w takiej implementacji?

0

Jest. Za bardzo kombinujesz. Wystarczy że na początku tego swojego skryptu dodasz uderzenie po tokena do tego 3rd api i zapiszesz go sobie do zmiennej i z niego skorzystasz.

0
Spectra napisał(a):

Jest. Za bardzo kombinujesz. Wystarczy że na początku tego swojego skryptu dodasz uderzenie po tokena do tego 3rd api i zapiszesz go sobie do zmiennej i z niego skorzystasz.

No właśnie pierwsze uderzenie do API dropboxa przy Autoryzacji API musi się odbywać chyba ręcznie, to znaczy, przeklejasz link do przeglądarki i dostajesz z niej AUTHORIZATION_CODE i jego przeklejasz z powrotem do programu

nie jest tak przy calym OAuth 2, ze to pierwsze uderzenie musi byc reczne? link

link

screenshot-20240115004237.png

0
Spectra napisał(a):

Jest. Za bardzo kombinujesz. Wystarczy że na początku tego swojego skryptu dodasz uderzenie po tokena do tego 3rd api i zapiszesz go sobie do zmiennej i z niego skorzystasz.

No przecież autor mówi że żeby dostać refresh token, to musi się zautoryzować jako użytkownik.

Złego z takim podejściem nic nie widzę specjalnie - może oprócz tego żebyś nie pomieszał kilku tokenów (bo np jakbyś chciał na jedno konto się zalogować Ty prywatnie i Ty w skrypcie, to żeby Ci się dwa refresh tokeny nie pomieszały, bo sobie będą inwalidować access tokeny nawzajem).

Natomiast pamiętaj po co oAuth został stworzony - po to żeby dało się udzielić 3rd-party aplikacjom dostęp do swoich kont, bez udostępniania danych do logowania - i to jest osiągnięte między innymi przez przekierowanie ruchu na stronę gdzie może być logowanie. Więc jakby zrobienie tego "z duchem" oAuth, to byłoby zrobić tak żeby ten twój skrypt w pythonie wystawił interfejs webowy, mógłby poprosić o autoryzację, on by Cię przekierował na stronę konta, tam byś się zalogował, udzielił dostępu, i skrypt dostałby refresh token. Wiem że mówiłeś że na serwerze nie ma przeglądarki, ale nie musi być - ten skrypt to mógłby być głupi flask który ma libkę do oAuth'a i serwer http z prosta strona HTML która nie umie robić nic poza redirectem. Więc moim zdaniem jakieś giga trudne by to nie było. Oczywiście wtedy każdy mógłby wejść na taki dashboard i zalogować się na swoje swoje konto po oAuth - więc to musiałby być jakimś hasłem chronione.

Ale z tym żeby po prostu dać mu gołe refresh token i access token do skryptu, to też to jakichś strasznych wad nie ma - poza tym że refresh token też ma swój czas życia, więc trzeba to będzie podmienić jak się zmieni.

0

Od biedy możesz tak zrobić, ale jeśli to ma być service-to-service call bez interakcji użytkownika (czyli flow nieinterkatywny) to popatrz czy to 3rd party API nie wspiera przepływu client_credentials, bo bardziej by tutaj pasował.

Wtedy tak jak słusznie zauważył @Spectra w swoim kodzie byś prosił o access token za pomocą credentiali.

1 użytkowników online, w tym zalogowanych: 0, gości: 1