Kao neko ko je upravo pusto custom made Identity Server 4 OAuth server u produkciju, mogu da ti pomognem oko razumevanja nekh stvari vezanih za "tokene", pocev od JWTa. Windows Authentication polako ide u zaboraav jer zahteva nekoliko round trips izmedju klijenta i servera, sto je protivno http/2 i http/3 filozofiji pa nikad nije ni napravljeno (tehnicki nista ih ne sprecava da naprave round trips unutar http/2 pipe-a ali ih ocigledno mrzi da se cimaju zbog tamo nekih non-cloud usera).
RSA je samo jedan od nacina da se zastiti token, mi ga koristimo zato sto je u osnovi sigurniji jer je baziran na PKI tehnologiji a mi imamo public facing SSO (single signon) portal za musterije firme, medjutim moze podjednako da se koristi i HMAC provera. HMAC provera se bazira na tome da authentication server koji izdaje tokene i client koji ga prima imaju zajednicki "secret". Kad kazem client ne mislim na end usera, mislim na clienta authentikacije, tj servis koji zahteva da enduser bude authenticated i koji ce proveravati da li je token ispravan, u tvom scenariju to bi bio gRPC server (ovo je deo OAuth terminologije). Po meni je to malo manje secure od RSA, ali dok god ne saljes secret u browser sesiji samom end useru, to je u osnovi security through obscurity i radi sasvim fino kad su i identity server i svi kllijenti pod tvojom kontrolom pa ne moras da saljes secret nikome sa strane.
Ne treba da vas plasi sto identity (oauth, jwt auth, itd) server ima private kljuc, taj private kljuc NIKADA ne napusta identity server, od identity servera mozes da dobijes jedino public keys, i svako iz audience-a ko treba ima pristup serveru moze da dobije public keys, da bi mogao da validira potpis u tokenima. PFX (private+public) cert koji identity server koristi za potpisivanje ne mora da bude komercijalni, moze da bude i self signed cert, ja sam npr instalirao self-signed cert koji istice 12/31/2099, tako da ne postoji neka velika prepreka u primeni ovog resenja.
Cisto da vidis da ovo sljaka, ovo je npr public key demo oauth servera od Duende-a (oni su napravili Identity Server biblioteku):
https://demo.duendesoftware.co...nown/openid-configuration/jwks (ovo je standardni URI nakalemljen na token issuer-a, pogledaj kako token izgleda u jwt.io za detalje). kljucna polja ovde su ti kid (key id, koji se pominje u JWTu), e i n (sto su eksponent i modulus javnog kljuca). Na osnovu toga klijent generise RSA public key context i validira signature, a zbog prirode PKI ne moze da generise private key da bi mogao da pravi fake tokene. Ako je potpis validan zna da je JWT izdao bas taj identity server, ako veruje serveru verovace i tokenu koji je server izdao i pogledace claims da vidi o kome se radi. Kad ti njihov demo server izda JWT token, ti mozes da skines ovaj public kljuc i proveris potpis i samim tim mozes da verujes da je Duende server identifikovao end usera. Na istom principu, samo sa drugim launch i token URIs rade i Azure AD, i Google Authentication i armija drugih komercijalnih OAuth resenja, kao i jos veca armija company-wide identity resenja kao sto je ono koje sam ja uradio. kao sto je dejanet napisao mozete da uzmete identity server 4 quick start i da napravite svoj authentication server od toga, a mozete i da se uvezete sa google API ili Azure AD, napravite sovju "aplikaciju" (i u slucaju Azure-a svoj tenant) i logujete korisnike preko njih.
That being said, ovo je preporuceni sistem, ali nije jedini, on samo znaci da je interkonekcija sa drugima "laksa" jer se svi medjusobno razumemo jer svi znamo sta je RFC7519 i kako treba da izgleda JWT i sta znaci Bearer authorization header. Ima tu jos sitnica tipa tenancy, audience, claims, itd, ali ovo je sustina.
Downside svega ovoga je sto su sve ovo osmisljavalli i pravili frontenderi te je sve ovo prioritetno osmisljeno za browser primene. Kad si u situaciji da pravis Windows desktop client/server resenje, forsiranje korisnika da iskoci u browser da se uloguje je big nono. Umilostivili su se da nam ostave nesto sto se zove "password grant flow", iako na sva usta trube da to ne bi trebalo da se koristi (jer ti kao client imas dodira sa enduser lozinkom), ali je password grant tu da ostane, sasvim sigurno jos dugo zbog API pristupa. problem je sto je, u ovo doba cloud histerije, OAuth nastao kao potreba za "delegated authentikacijom" sto ne postoji kao pojam u internom kompanijskom kruzenju gde su svi useri vec authenticated.
Ono sto mozes da uradis je da implementiras samo OpenID Connect server side (to je authentication deo OAuth standarda ali moze da radi i sam za sebe), vise detalja imas ovde:
https://openid.net/connect/ ali iskreno ne znamo koliko to sve moze da se direktno integrise u Active Directory. mislim da ADFS (Federation services) za Windows Server 2016+ podrzava direktno OpenID connect (ako sam dobro razumeo to bi znacilo da ti ADFS moze dati JWT za trenutnog korisnika), ali ja vec godinama polako napustam Windows tako da tu ne mogu mnogo da ti pomognem. Probaj da guglas i vidis.
Takodje, "Bearer" token je samo jedna klasa tokena, tebe niko ne obavezuje da koristis RFC7519 i JWT tokene u Bearer authorization headeru. Mozes da napravis svoj authorization sitem i da ga upucas u middleware pipeline u asp.net core aplikaciji (koja je ispod tvjih gRPC metoda). Da, mozes da imas stvari tipa HTTP header
Authorization: tdusko 123464566-neki-moj-blob. Dok god i pozivalac i pozvani znaju sta to znaci i kako pozivalac da generise a pozvani da proveri da li je validno i KO je predstavljen tim blobom to moze da radi. Sa razlicitim stepenom "we screwed this up" rizika
Mozes da napravis da tvoja aplikacija jednostavno posalje SID trenutno ulogovanog usera (npr
Authorization: SID windowssid header) i onda na gRPC serveru imas authentication middleware koji uzme sid iz hedera i ucita tog usera iz AD i upuca ga u identity sesije i kad poziv stigne u gRPC metod user je vec namesten; headeri su encrypted i niko ne moze da vidi. naravno, to isto znaci da neki haker ako zna SID usera moze da obavi poziv umesto njega i da je jedini nacin da ga zaustavis da iskljucis usera jer je sid permanent. Sve je stvar kompromisa sta vam je vazno i od cega ste u opasnosti. Ako je ovo interna aplikacija unutar firme, onda mozes i da razmislis o ovakvim varijantama.
Imas na netu primere kako se prave asp.net core middleware komponente, sa posebnim fokusom na authorization. Trebace vam malo getting-used-to za .net core, stvari su poprilicno drugacije nego sto su bile na frameworku, ali imho, vredi uloziti trud.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić