2015-05-12 9 views
12

chciałem realizować przepływ opisanego w tym pytaniu:jak obsługiwać błąd redirect_uri_mismatch, gdy aplikacja na Androida uzyskuje dostęp w trybie offline do zaplecza internetowego?

Authenticating with OAuth2 for an app *and* a website

rozwiązanie Google dla tego wymogu zostało opisane tu:

https://developers.google.com/identity/protocols/CrossClientAuth#offlineAccess

ja po tej instrukcji, ale niestety kiedy używam kod autoryzacji w backendie, aby uzyskać dostęp do tokena i odświeżyć token z google, google wyślij ten błąd:

{ 
    "error": "invalid_request", 
    "error_description": "Missing parameter: redirect_uri" 
} 

redirect_uri nie ma znaczenia dla tej sytuacji, ponieważ strona kliencka to Android.

Istnieje również kilka porad, które powiedzieli, że używają "postmessage" jako przekierowania uri lub użyj http://localhost jako przekierowania uri lub dodaj adres serwera w przekierowaniach URI w konsoli aplikacji Google, ale żaden nie działa dla tego przepływu.

Odpowiedz

1

Spędzam wiele razy, aby rozwiązać ten problem, a to narzędzie (https://developers.google.com/oauthplayground) zostało dostarczone przez google sprawia, że ​​jestem bardziej nieobecny, ponieważ został zaprojektowany dla głównego przepływu w sieci i token dostępu został wygenerowany przez to narzędzie było inne i wymaga przekierowania uri . (nawet jeśli korzystasz z tokena na okaziciela i używasz identyfikatora klienta i tajnego klucza) po tym wszystkim, że jestem pustym ciągiem użytkownika ("") jako URL przekierowania i na końcu uda mi się uzyskać token dostępu przez serwer.

+2

Czy możesz szczegółowo niektóre kroki, jak to zrobiłeś? Używam samouczka Google'a, a klucz przekierowania w jsonie mojego klienta to "redirect_uris: [" "], nie skonfigurowałem żadnego przekierowania URI w konsoli programisty google, nie przekazując żadnego przy użyciu oauth klienta Pythona, ale nadal dostaję błąd uri_redirect_mismatch –

0

spędzić dwa dni i zbadane prawie wszystkie problemy na stackoverflow i google przed dokładnym sprawdzeniem biblioteki AppAuth (https://openid.github.io/AppAuth-iOS/ i https://openid.github.io/AppAuth-Android/) i wreszcie znalazł odpowiedź.

Tak, istnieją dwie zasady znalazłem:

  1. redirect_uri powinno być jednym z:

    • swoją aplikację bundle_id lub package_name + :/ lub :// + *your_path* (np com.example.myapp://google_auth)
    • Twój client_id w odwrotnej formie DNS + :/ lub :// + *your_path* (np com.googleusercontent.apps.*account_id*:/my_path)
  2. redirect_uri w początkowym żądanie kodu autoryzacji (https://accounts.google.com/o/oauth2/v2/auth) oraz autoryzacji żądania wymiany kodu (https://www.googleapis.com/oauth2/v4/token) musi być całkowicie taka sama

Powiązane problemy