Wpis z mikrobloga

Pytanie dla obeznanych w oauth2, zaczynam dopiero się tym bawić i nie wiem czy wszystko dobrze rozumiem.

Piszę bardzo prostą apkę na Androida, w której będzie można się logować do Githuba, wyświetlać swoje prywatne repozytoria itp. Plan mam taki (gdyż nie jest to aplikacja webowa, ale na androida) żeby idąc za radą githuba pierwsze uwierzytelnianie zrobić jako Basic Auth, generując od razu nowy token oauth dla użytkownika (https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization), zapisać go do shared preferences, a potem po prostu przy każdym żądaniu doklejać nagłówek Authorization: token XXX.

Czy takie podejście jest OK? Bo widzę, że są jakieś biblioteki typu https://github.com/scribejava/scribejava i nie za bardzo rozumiem po co właściwie miałbym tego używać. Może to wcale nie jest takie proste jak przedstawiłem i coś przeoczyłem?

#androiddev #java #github
  • 7
@niezielony: Ogólnie OAuth i klucze sesji są po to, aby dodawać je w nagłówku do zapytań o prywatne rzeczy. W momencie kiedy wygasa Ci klucz sesji, masz dwa wyjścia - albo dostajesz refresh token, którym odświeżasz sesję, lub logujesz usera jeszcze raz i dostajesz nowy token sesji. Oba sposoba powinieneś obsłużyć w jakimś Api Managerze, który sobie napiszesz.
@niezielony: Czyli flow jest taki:
1. Logujesz się do githuba, który dajmy na to używa oAuth-a
2. W odpowiedzi dostajesz access token i refresh token, oba klucze zapisujesz w SharedPreferences
3. W momencie kiedy pobawiles sie appką i zostawiłeś na parę godzin, sesja na serwerze prawdopodobnie wygasła. Przy kolejnym zapytaniu, w którym używasz access tokena, dostaniesz pewnie błąd typu 'invalid access token' albo 'session expired' czy coś takiego. W tym momencie
@blok_maciej: Bawiłem się już curlem w konsoli oraz postmanem (chrome app) i na githubie wygląda to trochę inaczej, oni sugerują, żeby zalogować się przez basic auth, za pośrednictwem api stworzyć nową autoryzację np.: https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app
W odpowiedzi jak widzisz nie dostajemy żadnego refresh tokena, tylko po prostu token, który musimy sobie gdzieś w apce zapisać i można go używać dopóty, dopóki użytkownik nie cofnie nam uprawnień do aplikacji w ustawieniach swojego profilu.
@niezielony: W momencie kiedy user czysci dane apki, czysci sie praktycznie wszystko - prefsy(SharedPreferences), bazy danych itd. Nie wiem jak autoryzujesz usera, ale po prostu zaloguj go jeszcze raz i zapisz token do prefsów ;)
@blok_maciej: Wiem o tym, właśnie problem polega na tym, że gdy loguję go jeszcze raz, to aplikacja na githubie nadal wyświetla się jako aktywna (Settings -> Applications -> Authorized applications) i tak naprawdę tego tokena już nie da się odzyskać, a nie mogę stworzyć nowej autoryzacji, bo w odpowiedzi na żądanie nowej autoryzacji dla mojego `client_id i client_secret` zamiast tokena dostanę już pustego stringa, nie za bardzo rozumiem z
@blok_maciej: dobra, już chyba ogarnąłem jak to trzeba zrobić, najpierw zażądać utworzenia nowej autoryzacji, jeśli token jest pusty to z odpowiedzi wyciągnąć id, potem wywołać DELETE /authorizations/:id i utworzyć wszystko od nowa, w każdym razie dzięki za pomoc, już powoli zaczynam rozumieć tego oauth. ;)