Autoryzacja zewnętrznych serwisów

Autoryzacja zewnętrznych serwisów
Bambo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 779
0

Cześć, mam pytanie do speców od security.

Załóżmy, że mamy sobie backend wystawiający endpointy dla swojego frontendu. Autoryzacja odbywa się standardowo poprzez oauth2 i JWT.

Potem doszły wymagania, że mają być jakieś usługi dla zewnętrznych serwisów.
Powstał taki sposób autoryzacji zewnętrznych serwisów, że backend definiuje sobie secret key do odkodowania JWT dla każdego z zainteresowanych zewnętrznych serwisów i każdy z tych serwisów ten secret key musi znać. Zewnętrzny serwis tworzy sobie JWT na podstawie tego secret key, idzie request, backend przyjmuej token, odkodowuje tym secret key i jeśli dodatkowo zgadza się IP to puszczamy ten zewnętrzny serwis.

System ten był dawno temu projektowany i teraz architektom się nie podoba już.

Jakie są lepsze sposoby autoryzacji zewnętrznych serwisów? Generalnie architekci chcą się pozbyć tego, żeby trzeba było zewnętrznym serwisom przekazywać jakiś klucz. Coś wspominali o jakiś certyfikatach, kluczach prywatnych i publicznych itd.

Jakieś pomysły?

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

No jeśli chodzi o maszynę, to można dać jej konkretny certyfikat. Ale sposób API KEY + API SECRET jest standardowy i zazwyczaj wystarczający...

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1921
2

Ale chyba nie chcecie wystawiać dla zewnętrznych serwisów tego samego API co dla swojego frontu?

Bambo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 779
0

@Charles_Ray: @Juhas @WeiXiao

Ok, jestem po rozmowie z architektami.
A gdyby odwrócić ten proces?
Gdyby to działało tak, że to zainteresowany zewnętrzny serwis generuje certyfikat i go wysyła? My dzięki przesłanemu certyfikatowi możemy sprawdzać klucz wysyłany przez ten zewnętrzny serwis?
Takie flow chyba pozwala autoryzować i równocześnie my nic nikomu nie musimy wysyłać (kluczy).

Co Wy na to?

piotrpo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3338
0

Wadą tego co macie jest konieczność jawnego przekazywania kluczy szyfrujących dla tokenów JWT
Wystarczy rozbudować to, co wystawia tokeny JWT. Można np. zrobić tak:
Zewnętrzny serwis generuje sobie klucze i wystawia CSR
Wy to CSR podpisujecie i odsyłacie
ZS składa sobie i ma certyfikat
(to można robić nawet ręcznie, raz na 3 lata)

Następnie zewnętrzny serwis uderza do wystawcy JWT przedstawiając się certyfikatem
Dostaje JWT
Używa JWT przez okres jego ważności, żeby puknąć API

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1921
marian pazdzioch
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 794
0

Zacznijmy od przyczepienia się do pierwszego zdania, co to znaczy "sobie backend wystawiający endpointy dla swojego frontendu". Co to jest swój frontend?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.