2014-07-03 10 views
6

Potrzebuję wdrożyć mechanizm uwierzytelniania i autoryzacji dla mojego interfejsu API REST. To jest api odpoczynku jest dostępny z aplikacji mobilnej i aplikacji internetowej.Jak zaimplementować OAuth 2.0 jak uwierzytelnianie oparte na tokenach dla reszta API, które jest dostępne z aplikacji mobilnych i javascript internetowych

Mechanizm chciałbym wdrożyć:
Tak jak w moim rozumieniu, używam uwierzytelniania oparty
hasło. Aplikacja mobilna lub aplikacja internetowa javascript wysyła nazwę użytkownika i hasło za pośrednictwem żądania HTTPS, aby uzyskać token dostępu przez ograniczony czas.

Problem

  1. Jak każdy token dostępu wygasa 1 godzinę lub więcej. Użytkownik końcowy jest ponownie proszony o podanie nazwy użytkownika i hasła. To nie jest do zaakceptowania.
  2. Jeśli zwiększymy czas tokena przez dłuższy czas, to jeśli ktoś otrzyma token, może uzyskać dostęp do interfejsu API Rest przez dłuższy czas. Ponieważ aplikacja internetowa jest aplikacją javascript, jest ona łatwo dostępna w tekście planu.

Więc staram się zrozumieć, w jaki sposób aplikacje takie jak Facebook i Twitter realizują autoryzację dla swoich natywnych aplikacji mobilnych. Czy pamiętają token dostępu na zawsze, przechowując go w pamięci lokalnej. Tak więc, jeśli jakaś złośliwa aplikacja ma uprawnienia roota do telefonu z systemem Android, może uzyskać dostęp do tokenów.

Jakie są ulepszenia powyższego mechanizmu, aby działał zarówno w przypadku samodzielnej aplikacji internetowej opracowanej w javascript i aplikacji na Androida?

Odpowiedz

1

Żetony dostępu mają być krótkotrwałe. Aby utrzymać autoryzację przez dłuższy czas, OAuth2 ma coś, co nazywa się "odświeżaj tokeny".

Jeśli dostawca obsługuje tę usługę (i zarówno Google, jak i Facebook), konsument OAuth2 może żądać tokena odświeżania oprócz tokena dostępu podczas początkowego przepływu (rozmowy Google, w które wierzę "dostęp offline"). Token dostępu jest używany normalnie, ale kiedy wygasa, konsument może zażądać nowego tokena dostępu za pomocą jego poświadczeń i tokena odświeżania.

Zobacz dokument Google, aby uzyskać więcej informacji: https://developers.google.com/accounts/docs/OAuth2WebServer#offline.

+0

Ale jeśli mam dostęp z javascript, nie mogę ujawnić mojego tajnego tokena, który jest wymagany do odświeżenia tokena. Więc w jaki sposób osiągamy token odświeżania podczas uzyskiwania dostępu z javascript lub aplikacji mobilnej w pakiecie. –

+1

Zakładam, że rozumiesz, że używasz niejawnego przepływu, w którym token dostępu jest przekazywany bezpośrednio konsumentowi (JavaScript). Jeśli tak, to przepływ nie obsługuje odświeżania tokenów. W twoim przypadku możesz zajrzeć do grantu na hasło (https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#others), w którym użytkownik podaje swoje dane uwierzytelniające konsumentowi i konsumentom. te dla dostępu i odświeżania tokena. Zwykle konsument musiałby również podać swoje własne dane uwierzytelniające, ale możesz to uczynić opcjonalnie. –

+0

W przypadku aplikacji mobilnej przyznanie hasła ma sens. Jednak w przypadku webappu, zamiast domyślnej akceptacji, można użyć przyznania kodu autoryzacyjnego. Oznaczałoby to, że to serwer zachowuje tokeny, a nie javascript. –

Powiązane problemy