2015-04-03 29 views
8

Zaimplementuję uwierzytelnianie Token w moim API przy użyciu Django Rest Framework. Ale nie jestem pewien, czy powinien użyć podstawowego tokenu wbudowany w DRF lub użyć JSON Web Reklamowe (JWT) norma (za pomocą tego pakietu djangorestframework-jwt) jedyne odniesienie, które znalazłem w docs DRF:Czy należy używać uwierzytelniania JWT lub podstawowego tokena w środowisku Django Rest Framework?

W przeciwieństwie do wbudowanego schematu uwierzytelniania tokenów, uwierzytelnianie JWT nie musi używać bazy danych do sprawdzania poprawności tokena.

Czy są jakieś inne różnice, zalety lub wady do rozważenia?

Uwaga: API to będzie dostępne na stronie internetowej (przy użyciu angularjs) oraz aplikacji mobilnej

Odpowiedz

10

Patrząc na obecnych mechanizmów autoryzacji tokenów, polecam użyciu tokeny JWT niezależnie od platformy. Żetony JWT zawierają wszystkie te roszczenia i mogą zostać bezpiecznie zdekodowane na kliencie. Oznacza to, że zamiast odbierać nieprzezroczysty token, który nie przekazuje informacji klientowi, można przechowywać roszczenia w tokenie i dekodować klienta, aby zbudować interfejs. Żetony JWT są bezpaństwowcami, więc nie musisz przechowywać ani śledzić ich po stronie serwera, co jest korzystne w przypadku skalowania na wiele serwerów. Są również bezpieczne, ponieważ przechowujesz stronę serwera kluczy podpisu prywatnego, co pozwala ci upewnić się, że wszelkie wywołania przychodzące do twojego interfejsu API używają poprawnego tokena, który został wydany przez twój autoryzujący interfejs API.

Żetony JWT bardzo dobrze grają z klientami Angular. Ponieważ są one JSON, możesz je odszyfrować w swoim Angularowym kliencie, a nawet powiązać elementy Ui klienta bezpośrednio z Twoimi roszczeniami (ktoś z roszczeniem administratora może zobaczyć menu administratora, a użytkownik bez tego roszczenia nigdy nie dowie się, że menu istnieje, jeśli zostało zaimplementowane prawidłowo) .

Oprócz tego żeton JWT nadal zachowuje się w taki sam sposób, jak każdy żeton na okaziciela (wydawany przez auth api, przechowywany przez klienta, przekazywany do api zasobu w nagłówku autoryzacji), więc naprawdę nie ma wady, aby go użyć, może myśleć.

Podsumowując, będziesz miał mniej przerw między klientem a serwerem, a także mniej pracy podczas skalowania, jeśli zaimplementujesz tokeny JWT.

2

JWT:

  1. Any klient, który ma może prosić o rzeczy (podobnie jak pieniądze przy zakupie rzeczy)
  2. Nie raz wydane odnośnika bazy danych - wbudowany wygaśnięcie dyktuje walidacji

JWT ma datę ważności i do tego czasu pozostanie ważna. Może to być niepożądane, gdy musisz wylogować użytkownika po zresetowaniu hasła lub wymuszeniu.

Do rozwiązania powyższych problemów można wykorzystać czarną listę znaczników. Spowoduje to ponowne wprowadzenie śledzenia ciągłego lub w pamięci, którego JWT próbowało uniknąć w pierwszej kolejności. Jednak śledzenie będzie dotyczyło TYLKO wybranych klawiszy, podczas gdy podstawowe Token Auth śledzenie dotyczy wszystkich użytkowników.

JWT może zostać odkodowany przez każdego, kto go posiada. Dlatego należy mieć na uwadze informacje zapakowane w tokena. Z kolei Basic Auth Token jest prostym hashem, który może być jedynie odniesieniem do użytkownika.

Pamiętając o buforowaniu i innych ulepszeniach wydajności, nie trzeba martwić się o koszty ogólne, ale wygodę i przyszłą kontrolę przepływu.

Posiadanie pełnej kontroli nad uwierzytelnianiem, autoryzacją i unieważnianiem jest dobrą rzeczą, niezależnie od tego, czy użyto JWT + czarnej listy czy Basic Token Auth.

Dlatego podstawowy token autoryzacji may jest lepszy, jeśli przepływ jest dostosowany do potrzeb.