IdentityServer4. PÔhimÔisted. OpenID Connect, OAuth 2.0 ja JWT

Selle postitusega soovin alustada artiklite seeriat, mis on pĂŒhendatud IdentityServer4-le. Alustame pĂ”himĂ”istetest.

Praegu on kĂ”ige lootustandvam autentimise protokoll OpenID Connect, samas kui volituste (juurdepÀÀsu) protokoll on OAuth 2.0. IdentityServer4 rakendab neid kahte protokolli. See on optimeeritud lahendama tĂŒĂŒpilisi probleeme turvalisuse.

OpenID Connect — see on autentimise protokoll ja standard, mis ei anna juurdepÀÀsu ressurssidele (Web API), kuid kuna see on vĂ€lja töötatud volituste protokolli peale, OAuth 2.0kuid see vĂ”imaldab saada kasutaja profiilivÀÀrtusi just nagu oleksite saanud juurdepÀÀsu ressurssidele UserInfo.

JWT (JSON Web Token) on veebistandard, mis mÀÀratleb viisi, kuidas edastada kasutajaandmeid JSON-formaadis krĂŒpteeritud kujul.

OAuth 2.0 (RFC 6749) — see on volituste protokoll ja standard. See vĂ”imaldab rakendustel pÀÀseda ligi kaitstud ressurssidele, nĂ€iteks Web API-le.

Vaadakem diagrammi kaitstud ressursi juurde pÀÀsemisest ja uurime pÔhietappe ja kasutatavat terminoloogiat:

IdentityServer4. PÔhimÔisted. OpenID Connect, OAuth 2.0 ja JWT

  1. Kliendi nĂ”uab kasutajalt luba autoriseerimiseks tema nimel. Klient — on kliendi rakendus, mis pöördub turvalistele ressurssidele nende omaniku nimel. Ressurss — need on kĂ”ik meie kaitstud teenused Web API.

  2. Kasutaja lubab kliendi rakendusel autoriseerida end tema nimel, nĂ€iteks sisestades kasutajanime ja parooli. Need, kasutajanimi ja parool, toimivad kliendi rakenduse autoriseerimise volitusena. Kasutaja (ressursi omanik) — programm vĂ”i inimene, kes saab anda juurdepÀÀsu kaitstud ressurssidele, nĂ€iteks kasutajanime (username) ja parooli (password) sisestamise kaudu;

  3. Kliendi rakendus kĂŒsib juurdepÀÀsutĂŒkki IdentityServer4 enne, kui esitavad teavet enda kohta (client_id, client_secret), andes kasutaja autoriseerimiseks loa (username, password) ning esitades grant_type ja scope. SeejĂ€rel kontrollib autoriseerimiserver kliendi ja ressursi omaniku (kasutajanime ja parooli) autentimise.

    OAuth 2.0 protokoll autentib mitte ainult kasutajat, vaid ka kliendi rakendust, mis pÀÀseb ressurssidele juurde. Selleks sisaldab protokoll selliseid parameetreid nagu client_id ja client_secret.
    client_id — see on kliendi rakenduse identifikaator, mida kasutatakse IdentityServer4 kliendi teabe otsimiseks.
    client_secret on simuleerib kliendi rakenduse parooli ja seda kasutatakse kliendi rakenduse autentimiseks IdentityServer4. Kliendi saladus peaks olema tuntud ainult rakendusele ja API-le. Seega jÀreldame, et IdentityServer4 peab teadma oma kliente.

  4. Kui rakenduse autentsus on kinnitatud ja autoriseerimise luba on kehtiv, IdentityServer4 loomise access-tokeni (juurdepÀÀsutoken) rakenduse jaoks ja valikulise vÀrskenduse vÔtme (refresh-token). Autoriseerimisprotsess on lÔpetatud. Kui pÀring on ebaÔiglane vÔi volitamata, tagastab autoriseerimisteenuse server vastava veakoodi.

  5. Kliendi rakendus vÔtab kaitstud veeb API-lt andmeid, esitades samal ajal juurdepÀÀsutokeni autoriseerimiseks. Kui serveri ressursi vastuse kood 401, 403 vÔi 498, siis on autentimiseks kasutatav juurdepÀÀsutoken kehtetu vÔi aegunud.

  6. Kui token on kehtiv, Web API edastab andmed rakendusele.

Tokeni tĂŒĂŒbid

registreeritud IdentityServer4 klientidele on lubatud kĂŒsida IdentityServer4 identity-token, access-token ja refresh-token.

  • identity-token (tuvastustoken) — autentimise protsessi tulemus. Sisaldab kasutaja tuvastajat ja teavet selle kohta, kuidas ja millal kasutaja autentimist sooritab. Saate seda oma andmetega laiendada.
  • access-token (juurdepÀÀsutoken) — edastatakse kaitstud API-le ning seda kasutatakse autoriseerimiseks (juurdepÀÀsu lubamiseks) oma andmetele.
  • refresh-token (uuendustoken) — valikuline parameeter, mille autoriseerimiserver vĂ”ib tagasi saata juurdepÀÀsutokeni pĂ€ringu vastusena.

Lisame veel kaks mÔistet:

Authenticattion Server Url — lĂ”pp-punkt juurdepÀÀsuvĂ”tme saamiseks. KĂ”ik pĂ€ringud juurdepÀÀsuvĂ”tmete andmiseks ja taaskĂ€ivitamiseks suunatakse sellele URL-ile.

Resource Url — kaitstud ressursi URL, millele tuleb pöörduda, et sellele juurde pÀÀseda, edastades sellele juurdepÀÀsuvĂ”tme autoriseerimise pĂ€ises.

JuurdepÀÀsuvÔtme pÀrimine

JuurdepÀÀsuvÔtme pÀrimiseks teeb klient POST pÀringu lÔpp-punktile IdentityServer4 jÀrgmise pÀisega

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

ja edastades jÀrgmised parameetrid:

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

username, password, client_id ja client_secret olidud on juba analĂŒĂŒsitud. Vaatame ĂŒle ĂŒlejÀÀnud parameetrid:

grant_type — grant tĂŒĂŒpi vĂ”i volituse tĂŒĂŒpi. Volituse tĂŒĂŒp sĂ”ltub rakenduses kasutatavast volituste pĂ€ringust ja milliseid volituse tĂŒĂŒpe API toetab. Meie juhul on see password, mis vastab spetsifikatsioonile OAuth 2.0 tööst, mis vastab ressurssi omaniku juurdepÀÀsu volituskohtadele (autentimine kasutajanime ja parooli abil).

Protokoll OAuth 2.0 mÀÀratleb jÀrgmised volitused, mis nÔuavad kohustuslikku kasutajate interaktsiooni:

  • autentimiskood (authorization code). See on ĂŒks levinumaid volituse tĂŒĂŒpe, kuna see sobib hĂ€sti serveripoolsetele rakendustele (server-side applications), kus rakenduse lĂ€htekood ja kliendi saladus ei ole kolmandate isikute jaoks ligipÀÀsetavad;
  • kaudne (implicit). Kaudset autentimise volitust kasutatakse mobiil- ja veebirakendustes, kus kliendi saladuse konfidentsiaalsust ei saa tagada;

Ja volituse tĂŒĂŒbid, mis vĂ”ivad toimida ilma kohustuslikku kasutajate interaktsioonita:

  • ressursi omaniku andmed. Seda tĂŒĂŒpi volitusi tuleks kasutada ainult siis, kui kliendi rakendus naudib kasutaja usaldust ja kasutaja on rahul oma kasutajanime ja parooli sisestamisega. Seda tĂŒĂŒpi volitusi tuleks kasutada ainult siis, kui teised valikud pole saadaval. See tĂŒĂŒp volitusi on mugav ettevĂ”tte klientidele, kes on oma sĂŒsteemis juba kasutanud kasutaja volitusi ja soovivad ĂŒle minna OAuth 2.0.
  • kliendi volitustele. Neid kasutatakse rakenduse juurdepÀÀsuks API-le. See vĂ”ib olla kasulik nĂ€iteks siis, kui rakendus soovib vĂ€rskendada oma registreerimise teavet teenuses vĂ”i suunamiste URI-d, vĂ”i juurdepÀÀsuks muudele andmetele, mis on rakenduse kontol teenuses, teenuse API kaudu.

scope — see on valikuline parameeter. See mÀÀrab ulatuse. Serveri tagastatud juurdepÀÀsu token vĂ”imaldab juurdepÀÀsu ainult neile teenustele, mis kuuluvad sellesse ulatusse. St. me saame mitu teenust kokku koondada ĂŒhe ulatuse alla ja kui klient saab juurdepÀÀsu vĂ”tme sellele ulatusele, saab ta juurdepÀÀsu kĂ”igile neile teenustele. Ulatust saab kasutada ka autoriseerimisĂ”iguste piiramiseks (nĂ€iteks lugemis- vĂ”i kirjutamisĂ”igused).

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster