IdentityServer4. Konceptet kryesore. OpenID Connect, OAuth 2.0 dhe JWT

Me këtë postim dua të hap një seri artikujsh kushtuar IdentityServer4. Do të fillojmë me konceptet bazë.

Protokolli më premtues i autentikimit në këtë moment është OpenID Connect, ndërsa protokolli i autorizimit (dhënies së aksesit) është OAuth 2.0. IdentityServer4 zbaton këto dy protokolle. Ai është i optimizuar për zgjidhjen e problemeve tipike të sigurisë.

OpenID Connect — Ă«shtĂ« njĂ« protokoll dhe standard autentikimi; ai nuk jep akses te burimet (Web API), por meqĂ« Ă«shtĂ« ndĂ«rtuar mbi protokollin e autorizimit OAuth 2.0, ai ju lejon tĂ« merrni parametrat e profilit tĂ« pĂ«rdoruesit sikur tĂ« kishit marrĂ« akses te burimi UserInfo.

JWT (JSON Web Token) është një standard web që përcakton mënyrën e transmetimit të të dhënave të përdoruesit në format JSON në formë të enkriptuar.

OAuth 2.0 (RFC 6749) — Ă«shtĂ« njĂ« protokoll dhe standard autorizimi. Ai u lejon aplikacioneve tĂ« marrin akses nĂ« burime tĂ« mbrojtura, pĂ«r shembull te Web API.

Le t'i hedhim një sy diagramit të qasjes në një burim të mbrojtur dhe të shqyrtojmë hapat kryesorë si edhe terminologjinë e përdorur:

IdentityServer4. Konceptet kryesore. OpenID Connect, OAuth 2.0 dhe JWT

  1. Klienti i kĂ«rkon pĂ«rdoruesit leje pĂ«r tĂ« kaluar autorizimin nĂ« emrin e tij. KÎ»ÎŻÎżÏ…ent — Ă«shtĂ« njĂ« aplikacion klient qĂ« qaset nĂ« burime tĂ« mbrojtura nĂ« emĂ«r tĂ« pronarit tĂ« burimeve. Burimi — janĂ« tĂ« gjitha shĂ«rbimet tona tĂ« mbrojtura Web API.

  2. User i lejon aplikacionit klient tĂ« kalojĂ« autorizimin nĂ« emrin e tij, pĂ«r shembull duke futur login dhe fjalĂ«kalimin. Login-i dhe fjalĂ«kalimi do tĂ« shĂ«rbejnĂ« si grant autorizimi pĂ«r aplikacionin klient. User (pronari i burimit) — Ă«shtĂ« njĂ« program ose njĂ« person qĂ« mund tĂ« japĂ« akses nĂ« burime tĂ« mbrojtura, pĂ«r shembull duke futur login-in (username) dhe fjalĂ«kalimin (password);

  3. Aplikacioni klient kërkon token-in e aksesit nga IdentityServer4 duke dhënë informacion për veten (client_id, client_secret), duke paraqitur lejen e autorizimit nga përdoruesi (username, password) dhe duke dhënë grant_type dhe scope. Më pas serveri i autorizimit verifikon autenticitetin e klientit dhe kredencialet e pronarit të burimit (login-in dhe fjalëkalimin).

    Protokolli OAuth 2.0 kryen autentikimin jo vetëm të përdoruesit, por edhe të aplikacionit klient që po qaset në burime. Për këtë, protokolli parashikon parametra të tillë si client_id dhe client_secret.
    сlient_id — Ă«shtĂ« identifikuesi i aplikacionit klient, i pĂ«rdorur IdentityServer4 pĂ«r tĂ« gjetur informacion rreth klientit.
    client_secret Ă«shtĂ« analog i fjalĂ«kalimit pĂ«r aplikacionin klient dhe pĂ«rdoret pĂ«r autentikimin e aplikacionit klient nĂ« IdentityServer4. Sekreti i klientit duhet tĂ« njihet vetĂ«m nga aplikacioni dhe API. Nga sa u tha mĂ« sipĂ«r, arrijmĂ« nĂ« pĂ«rfundimin se IdentityServer4 duhet t’i njohĂ« klientĂ«t e vet.

  4. Nëse autenticiteti i aplikacionit është konfirmuar dhe leja e autorizimit është e vlefshme, IdentiryServer4 krijon access-token (token aksesi) për aplikacionin dhe një çelës rifreskimi opsional (refresh-token). Procesi i autorizimit ka përfunduar. Nëse kërkesa është e pavlefshme ose e paautorizuar, atëherë serveri i autorizimit kthen një kod me mesazhin përkatës të gabimit.

  5. Aplikacioni klient kërkon të dhëna nga Web API i mbrojtur, duke paraqitur tokenin e aksesit për autorizim. Nëse kodi i përgjigjes së serverit të burimeve është 401, 403 ose 498, atëherë tokeni i aksesit i përdorur për autentikim është i pavlefshëm ose ka skaduar.

  6. Nëse tokeni është i vlefshëm, Web API i jep të dhënat aplikacionit.

Llojet e tokenëve

Klientëve të regjistruar në IdentityServer4 u lejohet të kërkojnë nga IdentityServer4 identity-token, access-token dhe refresh-token.

  • identity-token (token identifikimi) — rezultati i procesit tĂ« autentikimit. PĂ«rmban identifikuesin e pĂ«rdoruesit dhe informacion se si dhe kur pĂ«rdoruesi kalon autentikimin. Mund tĂ« zgjerohet me tĂ« dhĂ«nat tuaja.
  • access-token (token aksesi) — i dĂ«rgohet API-sĂ« sĂ« mbrojtur dhe pĂ«rdoret prej saj pĂ«r autorizim (lejim aksesi) nĂ« tĂ« dhĂ«nat e veta.
  • refresh-token (token rifreskimi) — njĂ« parametĂ«r opsional qĂ« serveri i autorizimit mund ta kthejĂ« si pĂ«rgjigje ndaj kĂ«rkesĂ«s pĂ«r token aksesi.

Le të prezantojmë edhe dy koncepte të tjera:

Authenticatation Server Url — pika fundore pĂ«r marrjen e çelĂ«sit tĂ« aksesit. TĂ« gjitha kĂ«rkesat pĂ«r lĂ«shimin dhe rinovimin e çelĂ«save tĂ« aksesit do t’i dĂ«rgojmĂ« nĂ« kĂ«tĂ« URL.

Resource Url — URL-ja e burimit tĂ« mbrojtur, tĂ« cilĂ«n duhet ta pĂ«rdorni pĂ«r tĂ« marrĂ« akses nĂ« tĂ«, duke i dĂ«rguar çelĂ«sin e aksesit nĂ« header-in e autorizimit.

Kërkesa për çelësin e aksesit

Për të kërkuar çelësin e aksesit, klienti bën POST kërkesë në pikën fundore IdentityServer4 me header-in e mëposhtëm

'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
'Expect': '100-continue'

dhe duke kaluar parametrat e mëposhtëm:

'grant_type' : 'password',
'username' : login,
'password' : password,
'scope' : 'scope',
'client_id' : 'client_id',
'client_secret' : '{client_secret}'

username, password, client_id dhe client_secret janë shqyrtuar më sipër. Le të shqyrtojmë parametrat e tjerë:

grant_type — lloji i grantit ose lloji i autorizimit. Lloji i autorizimit varet nga metoda qĂ« aplikacioni pĂ«rdor pĂ«r tĂ« kĂ«rkuar autorizim, si edhe nga llojet e autorizimit qĂ« mbĂ«shteten nga API. NĂ« rastin tonĂ« ai do tĂ« ketĂ« vlerĂ«n password, e cila sipas specifikimit OAuth 2.0 i korrespondon grantit me kredencialet e pronarit tĂ« burimit (autorizim me hyrje dhe fjalĂ«kalim).

Protokolli OAuth 2.0 përcakton llojet e mëposhtme të granteve që kërkojnë ndërveprim të detyrueshëm me përdoruesin:

  • kodi i autorizimit (authorization code). ËshtĂ« njĂ« nga llojet mĂ« tĂ« zakonshme tĂ« autorizimit, pasi pĂ«rshtatet mirĂ« pĂ«r aplikacionet server-side, ku kodi burimor i aplikacionit dhe sekreti i klientit nuk janĂ« tĂ« qasshĂ«m pĂ«r palĂ« tĂ« treta;
  • i nĂ«nkuptuar (implicit). Lloji i nĂ«nkuptuar i autorizimit pĂ«rdoret nga aplikacionet mobile dhe web, ku konfidencialiteti i sekretit tĂ« klientit nuk mund tĂ« garantohet;

Dhe llojet e granteve që mund të ekzekutohen pa ndërveprim interaktiv me përdoruesin:

  • kredencialet e pronarit tĂ« burimit (resource owner). Ky lloj autorizimi duhet tĂ« pĂ«rdoret vetĂ«m kur aplikacioni klient gĂ«zon besimin e pĂ«rdoruesit dhe pĂ«rdoruesi nuk ka shqetĂ«sim tĂ« fusĂ« hyrjen dhe fjalĂ«kalimin e tij. Ky lloj autorizimi duhet tĂ« pĂ«rdoret vetĂ«m kur opsionet e tjera nuk janĂ« tĂ« disponueshme. Ky lloj autorizimi Ă«shtĂ« i pĂ«rshtatshĂ«m pĂ«r klientĂ«t korporativĂ« qĂ« tashmĂ« kanĂ« pĂ«rdorur kredencialet e pĂ«rdoruesit brenda sistemit tĂ« tyre dhe duan tĂ« kalojnĂ« nĂ« OAuth 2.0.
  • kredencialet e klientit. PĂ«rdoren kur aplikacioni hyn nĂ« API. Kjo mund tĂ« jetĂ« e dobishme, pĂ«r shembull, kur aplikacioni dĂ«shiron tĂ« pĂ«rditĂ«sojĂ« informacionin e vet tĂ« regjistrimit nĂ« shĂ«rbim ose URI-nĂ« e ridrejtimit, ose tĂ« ketĂ« qasje nĂ« informacione tĂ« tjera tĂ« ruajtura nĂ« llogarinĂ« e aplikacionit nĂ« shĂ«rbim pĂ«rmes API-sĂ« sĂ« shĂ«rbimit.

scope — Ă«shtĂ« njĂ« parametĂ«r opsional. Ai pĂ«rcakton fushĂ«n e veprimit. Token-i i aksesit i kthyer nga serveri do tĂ« japĂ« qasje vetĂ«m te shĂ«rbimet qĂ« pĂ«rfshihen nĂ« kĂ«tĂ« scope. Pra, mund tĂ« bashkojmĂ« disa shĂ«rbime nĂ«n njĂ« scope tĂ« vetĂ«m dhe, nĂ«se klienti merr njĂ« çelĂ«s aksesi pĂ«r kĂ«tĂ« scope, ai fiton qasje nĂ« tĂ« gjitha kĂ«to shĂ«rbime. Scope mund tĂ« pĂ«rdoret gjithashtu pĂ«r tĂ« kufizuar tĂ« drejtat e autorizimit (pĂ«r shembull, qasje vetĂ«m pĂ«r lexim ose pĂ«r shkrim)

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster