2016-02-03 21 views
5

Odwiedzałem już ponad dzień. Być może brakuje mi prawidłowych słów kluczowych.Zabezpieczanie klucza API w Angular2

Mam następującą konfigurację:

  • ExpressJS API (działa z PM2 na porcie 3000)
  • Angular2 APP - służył poprzez nginx

Zarówno działać na tym samym serwerze.

apeluje do API (mydomain/api /) są przekierowywane do 127.0.0.1:3000

Dla wywołań API, które wymagają zezwolenia będę używać JWT i uwierzytelnianie użytkownika.

Co chcę osiągnąć to to, że generuję token dla mojej aplikacji angular2, która jest dozwolona/wymagana do wykonywania publicznych połączeń (na przykład list produktów).

Ten token należy oczywiście bezpiecznie przetransferować, ponieważ nie chcę, aby inni uzyskiwali moje produkty i ceny za pośrednictwem bezpośrednich połączeń api (za pomocą skradzionego tokena).

Każda pomoc doceniona.

Odpowiedz

0

Twój żeton ma nadzieję, że podróżuje z https. I kiedy to robi, że nie mogą dostać ...

UPDATE

z wiki:

Ponieważ HTTP HTTPS piggybacks całkowicie na szczycie TLS, całość protokół HTTP bazowy może być zaszyfrowany . Obejmuje URL życzenie (który szczególności strona została wymagane), kwerendy parametrów, nagłówki,

https://en.wikipedia.org/wiki/HTTPS

+0

Przepraszam, jestem trochę głupi w tej sekcji. Oczywiście skonfiguruję https. Ale nadal będę musiał umieścić mój publiczny token w parametrze Żądanie nagłówka/adresu URL z kanciastej aplikacji, aby był widoczny dla każdego. Czy może czegoś brakuje? – user1261284

+0

zobacz wiki, ponieważ https to protokół warstwy aplikacji, który szyfruje również nagłówki. – eesdil

+1

Tak, masz masztu token w każdym wywołaniu. Ale token jest generowany na serwerze ... Mam teraz podobny układ (express - kątowy 2). Przekażę tutaj swój przepływ pracy jako odpowiedź. –

1

Po pierwsze, jak @eesdil powiedział, należy użyć protokołu HTTPS. W takim przypadku wszystkie połączenia są szyfrowane i bezpieczne.

W moim przykładzie (Angular 2, Express i JWT) użyłem modułu kryptograficznego z algorytmem pbkdf2 do mieszania haseł.

To workflow:

  • /login/zarejestruj -> hash hasła i wygenerować sól -> przechowywać na serwerze
  • /login -> potwierdzić hasło przeciwko przechowywanej jeden -> wygenerowania JWT -> Zapisz to w localStorage na kliencie
  • /api -> wysłać JWT w Auth nagłówka -> potwierdzić na serwerze -> wyślij odpowiedź

przykład praca jest tutaj: 0.

+0

Ok, dziękuję bardzo. Ale załóżmy, że Twoja aplikacja startowa wyświetla listę miast na stronie głównej. Nie chcę, aby ludzie bezpośrednio kontaktowali się z API/miastami. Tak więc wygenerowałem JWT, który jest wewnętrznie przypisany do publicznych wywołań interfejsu API. Mógłbym udostępnić publiczne JWT za pośrednictwem ekspresowej sesji w bezpieczny sposób, jak sądzę. Skonfiguruję https i mój pomysł w całości i wrócę z wynikiem. – user1261284

+0

Nie, nie używaj sesji i plików cookie do przechowywania lub przesyłania tokenu jwt. Bez względu na to, w jakiej lokalizacji się nazywają/api/miasta, muszą mieć prawidłowy jwt. Poprawię swój przykład za pomocą funkcji odświeżania. Możesz kodować jwt po stronie klienta i sprawdzać, kiedy wygasną ... –

Powiązane problemy