Zabezpieczenie REST API

0

Mam aplikację w Javie do której napisałem prosty mikroserwis w Node.js który działa jak REST API. Chciałbym to zabezpieczyć i wyczytałem, że do tego powinno się używać OAuth2 i tokenów, ale jak to ma działać? Muszę postawić własny serwer? Bo chyba używanie do tego FB albo Google mija się z celem. Zresztą to prosty serwis i tyle roboty, żeby go zabezpieczyć? I po każdym starcie apek będę musiał coś wpisywać, żeby sie autoryzować? A co jakbym chciał komuś innemu dać dostęp do tego API?

1

Co rozumiesz przez zabiezpieczyć? Jeśli potrzebujesz autoryzacji i szyfrowania to zacznij od Mutual TLS'a . To TLS z tą różnicą, że autentykacja odbywa się również po stronie serwera a nie tylko klienta. Wtedy jeśli chciałbyś komuś dać dostęp do serwera, to po prostu udostępniasz mu certyfikaty. Czy faktycznie potrzebujesz OAuth'a ciężko stwierdzić po Twoim poscie.

0

Btw z tego co wiem REST Api - opiera się na byciu "bezstanowym" (stateless) - https://en.wikipedia.org/wiki/Representational_state_transfer - czyli w API m.in nie ma sesji i każdy kontakt z serwerem powinien zawierać autentykację (o ile takowa jest potrzebna).
Nie napisałeś co te API ma robić, bo jeśli moze z niego korzystać każdy (publiczne api) - to po co CI zabezpieczenie i co ono miałoby Ci dać?

Jeśli jakiś Twój kod będzie klientem tego API - to tak - będziesz musiał się za każdym razem przedstawiać w jakiś sposób (np login + hasło), istnieją metody związane z tokenami tak jak pisałeś, ale czy Ty się nie porywasz z motyką na słońce? Może te zabepieczenie wcale nie jest Ci potrzebne aż tak. Btw czy Basic Auth Ci nie wystarczy?

0

Jest to API ogłoszeń o pracę, ale nie dla każdego i chciałbym, żeby komunikacja między Node a Javą była w miarę zaszyfrowana a przede wszystkim, żeby nie każdy mógł pobrać listę ofert. Czyli np jak ktoś w Ruby chciałby się do tego podłączyć i pobierać oferty z API na Node to musiałby otrzymać ode mnie jakiś klucz. Na OAuth2 robiłem tylko autoryzacje przez Facebooka, ale to bez sensu i za każdym razem trzeba by wpisywać login i hasło. Chciałbym, żeby to działało tak, że komuś wystarczy tajny kod do pobrania i tyle.

0

Masz API - user X ma mieć dostęp do zasobu A, user Y do zasobu B.
Nieważne jest czy łączy się z ruby/php/gimbazjalnego-modyfikatora-frajdy :) - api ma udostępniać metody i tyle. Przykładowe żadanie może wyglądać tak (curl)

  http://twoja.domena
  -H 'authorization: Basic TUTAJPOLECIZAKODOWANEHASLO=' \
  -H 'cache-control: no-cache' \
  -d '{
	"userCode":"X",
	"userPassword":"hasloWmaslo"
}'```

Korzystasz z postmana?

Serwer swojego API masz napisany w javie czy nodzie? są na jednym serwerze?

Piszesz że chciałbyś, aby nie każdy miał możliwość pobierania czegoś - rozumiem że udostępniasz API dla wszystkich - więc musisz tylko zaimplementować jakiś mechanizm ACL (rbac/ czy cokolwiek)
0

Dzięki za pomoc.
Serwer jest w Node.js. Trafiłem na kilka stron i prawie wszędzie jest, żeby REST API zabezpieczać przez OAuth2.

0

4programmers[dot]net/Forum/Java/224877-rest_api_secure
owasp[dot]org/index.php/REST_Security_Cheat_Sheet
stormpath[dot]com/blog/secure-your-rest-api-right-way

0

Jest często np. coś takiego:

curl -X POST https://api.jakasdomena/authorize -d 'grant_type=client_credentials&app_id=1111111&app_secret=61e98c657baa5f5d7ca0a789e7d2adacdf1771e3bbca0643cef0921689eb48f4'

odpowiedź i token w takiej postaci:

{
    "access_token":"3edb31532a5eade8fc2e2838ab79062ebf170798c7657b95d90c8c94f8dd033f",
    "token_type":"bearer",
    "expires_in":86400
}  

a potem takie coś np. pobieranie użytkowników w postaci JSON:

curl -X GET https://api.jakasdomena/users -H "Authorization: Bearer 3edb31532a5eade8fc2e2838ab79062ebf170798c7657b95d90c8c94f8dd033f"

Analizując wiele takich REST-owych serwisów to często właśnie to tokenowe Bearer Authorization a nie Basic i np. PayU, czy nawet Facebook Graph API się na czymś takim opiera.

1 użytkowników online, w tym zalogowanych: 0, gości: 1