IdentityServer4. Pagrindinės sąvokos. OpenID Connect, OAuth 2.0 ir JWT

Šiuo įrašu noriu atidaryti straipsnių, skirtų IdentityServer4, giją. Pradėkime nuo pagrindinių sąvokų.

Šiuo metu perspektyviausias autentifikavimo protokolas yra „OpenID Connect“, o autorizacijos protokolas (suteikiantis prieigą) yra „OAuth 2.0“. IdentityServer4 įgyvendina šiuos du protokolus. Jis optimizuotas spręsti tipinės problemos saugumas.

„OpenID Connect“ yra autentifikavimo protokolas ir standartas, jis nesuteikia prieigos prie išteklių (Web API), bet nuo jis sukurtas ant autorizacijos protokolo „OAuth 2.0“, tai leidžia gauti vartotojo profilio parametrus taip, lyg turėtumėte prieigą prie šaltinio Vartotojo informacija.

J.W.T. (JSON žiniatinklio prieigos raktas) yra žiniatinklio standartas, apibrėžiantis būdą, kaip perduoti vartotojo duomenis JSON formatu šifruota forma.

OAuth 2.0 (RFC 6749) yra autorizacijos protokolas ir standartas. Tai leidžia programoms pasiekti apsaugotus išteklius, pvz., žiniatinklio API.

Pažvelkime į prieigos prie apsaugoto šaltinio schemą ir supraskime pagrindinius veiksmus bei priimtą terminiją:

IdentityServer4. Pagrindinės sąvokos. OpenID Connect, OAuth 2.0 ir JWT

  1. Klientas prašo vartotojo leidimo autentifikuotis jo vardu. Klientas yra kliento programa, kuri pasiekia apsaugotus išteklius išteklių savininko vardu. išteklių – tai visos mūsų saugomos paslaugos Žiniatinklio API.

  2. Vartotojas leidžia kliento programai autentifikuotis jo vardu, pavyzdžiui, įvesdamas prisijungimo vardą ir slaptažodį. Prisijungimo vardas ir slaptažodis bus įgaliojimas kliento programai. Vartotojas (išteklių savininkas) — programa arba asmuo, galintis suteikti prieigą prie saugomų išteklių, pavyzdžiui, įvesdamas prisijungimo vardą (vartotojo vardą) ir slaptažodį (slaptažodį);

  3. Kliento programa prašo prieigos prieigos rakto IdentityServer4 pateikdamas informaciją apie save (client_id, client_secret), suteikiant vartotojo leidimą (username, password) ir teikiant grant_type и scope. Tada autorizacijos serveris patikrina kliento autentiškumą ir informaciją apie išteklių savininką (prisijungimo vardą ir slaptažodį).

    OAuth 2.0 protokolas autentifikuoja ne tik vartotoją, bet ir kliento programą, pasiekiančią išteklius. Tuo tikslu protokole numatyti tokie parametrai kaip kliento ID и kliento paslaptis.
    kliento_id yra naudojamas kliento programos identifikatorius IdentityServer4 ieškoti informacijos apie klientą.
    kliento paslaptis yra analogiškas kliento programos slaptažodžiui ir naudojamas kliento programos autentifikavimui IdentityServer4. Kliento paslaptis turėtų būti žinoma tik programai ir API. Remdamiesi tuo, kas išdėstyta pirmiau, darome tokią išvadą „IdentityServer4“ turi žinoti apie savo klientus.

  4. Jei paraiška patvirtinta ir autorizavimo leidimas galioja, IdentiryServer4 kuria access-токен (prieigos prieigos raktas) programai ir pasirenkamas atnaujinimo raktas (refresh-токен). Autorizacijos procesas baigtas. Jei užklausa neteisinga arba neteisėta, autorizacijos serveris grąžina kodą su atitinkamu klaidos pranešimu.

  5. Kliento programa pasiekia saugią žiniatinklio API duomenims, suteikdama prieigos raktą autorizacijai. Jei išteklių serverio atsako kodas 401, 403 arba 498, tada autentifikavimui naudojamas prieigos raktas yra netinkamas arba pasibaigęs.

  6. Jei žetonas galioja, Web API teikia duomenis programai.

Žetonų rūšys

Užsiregistravo IdentityServer4 klientams leidžiama prašyti IdentityServer4 identity-žetonas, access-žetonas ir refresh-žetonas.

  • tapatybės atpažinimo ženklas (identifikavimo ženklas) — autentifikavimo proceso rezultatas. Jame yra vartotojo ID ir informacija apie tai, kaip ir kada vartotojas autentifikuojamas. Galite išplėsti jį naudodami savo duomenis.
  • prieigos raktas — yra perduodamas į apsaugotą API ir naudojamas jos duomenims autorizuoti (suteikti prieigą).
  • atnaujinimo prieigos raktas (atnaujinimo prieigos raktas) yra pasirenkamas parametras, kurį autorizacijos serveris gali grąžinti atsakydamas į prieigos prieigos rakto užklausą.

Pristatykime dar dvi sąvokas:

Autentifikavimo serverio URL — prieigos rakto gavimo galutinis taškas. Visas užklausas dėl prieigos raktų suteikimo ir atnaujinimo nukreipsime į šį URL.

Ištekliaus URL — Apsaugoto ištekliaus, su kuriuo reikia susisiekti, norint prieiti prie jo, URL, perduodant prieigos raktą leidimo antraštėje.

Prieigos rakto užklausa

Norėdamas paprašyti prieigos rakto, klientas tai daro POST užklausa galutiniam taškui IdentityServer4 su tokia antrašte

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

ir perduoti šiuos parametrus:

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

username, password, client_id и client_secret buvo aptarti aukščiau. Pažvelkime į likusius parametrus:

dotacijos_tipas — dotacijos tipas arba leidimo tipas. Autorizacijos leidimo tipas priklauso nuo programoje naudojamo autorizacijos užklausos metodo, taip pat nuo to, kokius leidimų tipus palaiko API. Mūsų atveju tai bus svarbu password, kuris yra pagal specifikaciją OAuth 2.0 atitinka ištekliaus savininko prieigos duomenų suteikimą (įgaliojimas prisijungimo vardu ir slaptažodžiu).

Protokolas OAuth 2.0 apibrėžia šiuos reikalingų dotacijų tipus privaloma sąveika su vartotojais:

  • autorizacijos kodas. Tai vienas iš labiausiai paplitusių autorizacijos leidimo tipų, nes puikiai tinka serverio programoms, kur programos šaltinio kodas ir kliento paslaptis nėra prieinami pašaliniams asmenims;
  • numanomas. Netiesioginio autorizavimo leidimo tipas naudojamas mobiliosiose ir žiniatinklio programose, kuriose negali būti garantuotas kliento paslapties konfidencialumas;

Ir dotacijų rūšys gali būti vykdomas be vartotojo sąveikos:

  • išteklių savininko informacija. Šio tipo leidimai turėtų būti naudojami tik tuo atveju, jei vartotojas pasitiki kliento programa ir vartotojui patogu įvesti savo prisijungimo vardą ir slaptažodį. Šis leidimo tipas turėtų būti naudojamas tik tada, kai nėra kitų parinkčių. Šio tipo leidimas patogus verslo klientams, kurie jau naudojo vartotojo kredencialus savo sistemoje ir nori pereiti prie OAuth 2.0.
  • kliento kredencialus. Naudojama, kai programa pasiekia API. Tai gali būti naudinga, pavyzdžiui, kai programa nori atnaujinti savo paslaugos registracijos informaciją arba peradresuoti URI arba pasiekti kitą informaciją, saugomą programos paslaugos paskyroje per paslaugos API.

sritis – Tai neprivalomas parametras. Tai apibrėžia taikymo sritį. Serverio grąžintas prieigos raktas suteiks prieigą tik prie paslaugų, kurios patenka į tą sritį. Tie. galime sujungti kelias paslaugas į vieną apimtį ir jei klientas gauna prieigos raktą prie šios apimties, jis gauna prieigą prie visų šių paslaugų. Taikymo sritis taip pat gali būti naudojama autorizavimo teisėms apriboti (pavyzdžiui, skaitymo arba rašymo prieiga)

Šaltinis: www.habr.com

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster