Šiuo įrašu noriu atidaryti straipsnių, skirtų IdentityServer4, giją. Pradėkime nuo pagrindinių sąvokų.
Šiuo metu perspektyviausias autentifikavimo protokolas yra , o autorizacijos protokolas (suteikiantis prieigą) yra . įgyvendina šiuos du protokolus. Jis optimizuotas spręsti tipinės problemos saugumas.
yra autentifikavimo protokolas ir standartas, jis nesuteikia prieigos prie išteklių (Web API), bet nuo jis sukurtas ant autorizacijos protokolo , tai leidžia gauti vartotojo profilio parametrus taip, lyg turėtumėte prieigą prie šaltinio .
(JSON žiniatinklio prieigos raktas) yra žiniatinklio standartas, apibrėžiantis būdą, kaip perduoti vartotojo duomenis JSON formatu šifruota forma.
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ą:

-
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 .
-
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į);
-
Kliento programa prašo prieigos prieigos rakto
IdentityServer4pateikdamas informaciją apie save (client_id,client_secret), suteikiant vartotojo leidimą (username,password) ir teikiantgrant_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 identifikatoriusIdentityServer4ieškoti informacijos apie klientą.
kliento paslaptis yra analogiškas kliento programos slaptažodžiui ir naudojamas kliento programos autentifikavimuiIdentityServer4. 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. -
Jei paraiška patvirtinta ir autorizavimo leidimas galioja,
IdentiryServer4kuriaaccess-токен(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. -
Kliento programa pasiekia saugią žiniatinklio API duomenims, suteikdama prieigos raktą autorizacijai. Jei išteklių serverio atsako kodas , arba , tada autentifikavimui naudojamas prieigos raktas yra netinkamas arba pasibaigęs.
-
Jei žetonas galioja,
Web APIteikia 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
