Autoryzacja zewnętrznych serwisów

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?

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...

2

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

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?

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

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?

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