Introduction
Token-based authentication on näkyvästi esillä kaikkialla verkossa nykyään. Useimmat verkkoyhtiöt käyttävät API, tokens ovat paras tapa käsitellä todennus useita käyttäjiä.
hakemuksesi token-pohjaisen todennuksen valinnassa on joitakin erittäin tärkeitä tekijöitä. Tärkeimmät syyt poletteihin ovat:
- Tilattomat ja skaalautuvat palvelimet
- Mobiilisovellusvalmis
- Pass authentication to other applications
- Extra security
Who Uses Token-Based Authentication?
kaikki suuret API-tai verkkosovellukset, joihin olet törmännyt, ovat todennäköisesti käyttäneet poletteja. Sovellukset, kuten Facebook, Twitter, Google+, GitHub ja niin monet muut käyttävät poletteja.
Katsotaanpa, miten se toimii.
miksi tokeneita tuli
ennen kuin voimme nähdä, miten token-pohjainen autentikointi toimii ja sen hyödyt, meidän on tarkasteltava tapaa, jolla autentikointi on tehty aiemmin.
palvelinpohjainen todennus (perinteinen menetelmä)
koska HTTP-protokolla on valtioton, tämä tarkoittaa, että jos tunnistamme käyttäjän käyttäjätunnuksella ja salasanalla, sovelluksemme ei seuraavan pyynnön yhteydessä tiedä, keitä olemme. Meidän pitäisi todentaa se uudelleen.
perinteinen tapa saada sovelluksemme muistamaan keitä olemme on tallentaa käyttäjän kirjautuneet tiedot palvelimelle. Tämä voidaan tehdä muutamalla eri tavalla istunnossa, yleensä muistissa tai tallennettuna levylle.
kun verkko, sovellukset ja mobiilisovelluksen nousu ovat toteutuneet, tunnistautumismenetelmässä on ilmennyt ongelmia erityisesti skaalautuvuudessa.
palvelinpohjaisen todennuksen ongelmat
tähän todennusmenetelmään liittyi muutamia suuria ongelmia.
- Sessions: Aina kun käyttäjä todennetaan, palvelimen on luotava tietue jonnekin palvelimellemme. Tämä tehdään yleensä muistissa ja kun on paljon käyttäjiä todentaa, overhead palvelimella kasvaa.
- skaalautuvuus: koska istunnot tallennetaan muistiin, tämä aiheuttaa ongelmia skaalautuvuudessa. Kun pilvipalvelujen tarjoajamme alkavat jäljitellä palvelimia käsittelemään sovelluskuormaa, elintärkeiden tietojen tallentaminen istuntomuistiin rajoittaa kykyämme skaalautua.
- CORS: Koska haluamme laajentaa sovellustamme, jotta tietojamme voidaan käyttää useissa mobiililaitteissa, meidän on huolehdittava ristikkäisestä resurssien jakamisesta (Cors). Kun käytät AJAX puhelut napata resursseja toisen verkkotunnuksen (mobiili meidän API-palvelin), voisimme törmätä ongelmiin kiellettyjen pyyntöjen.
- CSRF: meillä on myös suoja ristikkäisiä pyyntöjä vastaan (CSRF). Käyttäjät ovat alttiita CSRF-hyökkäyksille, koska ne voidaan jo todentaa esimerkiksi pankkisivustolla, ja tätä voitaisiin hyödyntää Vierailtaessa muilla sivustoilla.
näissä ongelmissa skaalautuvuus oli tärkein, joten oli järkevää kokeilla erilaista lähestymistapaa.
miten Token-pohjainen autentikointi toimii
Token-pohjainen autentikointi on valtiotonta. Emme tallenna mitään tietoja käyttäjästämme palvelimelle tai istuntoon.
jo tämä konsepti hoitaa monet ongelmat, jotka liittyvät tietojen tallentamiseen palvelimelle.
ei istuntotietoja tarkoittaa, että sovellus voi skaalata ja lisätä koneita tarpeen mukaan ilman huolta siitä, missä käyttäjä on kirjautunut sisään.
vaikka tämä toteutus voi vaihdella, sen pääpiirteet ovat seuraavat:
- käyttäjä pyytää pääsyä käyttäjätunnuksella / salasanalla
- sovellus vahvistaa tunnukset
- sovellus tarjoaa allekirjoitetun tunnuksen asiakkaalle
- asiakas tallentaa Tokenin ja lähettää sen jokaisen pyynnön kanssa
- palvelin tarkastaa Tokenin ja vastaa tiedoilla
jokainen pyyntö vaatii Tokenin. Tämä token tulee lähettää HTTP-otsikossa, jotta pidämme ajatuksen valtiottomista HTTP-pyynnöistä. Meidän on myös asetettava palvelimemme hyväksymään pyyntöjä kaikilta verkkotunnuksilta käyttäen Access-Control-Allow-Origin: *
. Acao: n otsakkeessa *
nimeämisessä on mielenkiintoista se, että se ei salli pyyntöjä, joissa pyydetään toimittamaan tunnistetietoja, kuten HTTP-todennusta, asiakaspuolen SSL-varmenteita tai evästeitä.
kun olemme todenneet tietomme oikeiksi ja meillä on tunnuksemme, voimme tehdä monia asioita tällä tunnuksella.
voisimme jopa luoda lupapohjaisen tunnuksen ja välittää sen kolmannen osapuolen sovellukselle (vaikkapa uudelle mobiilisovellukselle, jota haluamme käyttää), ja he voivat päästä käsiksi tietoihimme – mutta vain niihin tietoihin, jotka Sallimme kyseisellä tunnuksella.
polettien hyödyt
valtiottomat ja skaalattavat
poletit tallennetaan asiakaspuolelle. Täysin valtioton ja valmis skaalattavaksi. Kuormataseemme pystyvät siirtämään käyttäjän mille tahansa palvelimellemme, koska tila-tai istuntotietoja ei ole missään.
jos säilyttäisimme istuntotietoja käyttäjästä, joka oli kirjautunut sisään, tämä vaatisi meitä jatkamaan kyseisen käyttäjän lähettämistä samalle palvelimelle, jolla hän kirjautui sisään (kutsutaan session affinityksi).
tämä tuo mukanaan ongelmia, sillä osa käyttäjistä joutuisi samalle palvelimelle ja tämä voisi aiheuttaa raskaan liikenteen paikan.
ei kuitenkaan hätää! Nämä ongelmat ovat menneet poletteihin, koska token itse pitää tiedot kyseiselle käyttäjälle.
turvallisuus
token, ei eväste, lähetetään jokaisen pyynnön yhteydessä, ja koska evästettä ei lähetetä, tämä auttaa estämään CSRF-hyökkäyksiä. Vaikka erityinen toteutus tallentaisi tunnuksen evästeeseen asiakaspuolella, eväste on pelkkä tallennusmekanismi todennuksen sijaan. Ei ole istuntopohjaista tietoa manipuloitavaksi, koska meillä ei ole istuntoa!
token myös vanhenee tietyn ajan kuluttua, joten käyttäjän on kirjauduttava sisään uudelleen. Tämä auttaa meitä pysymään turvassa. On myös Tokenin kumoamisen käsite, jonka avulla voimme mitätöidä tietyn Tokenin ja jopa ryhmän tokeneita, jotka perustuvat samaan valtuutusantiin.
laajennettavuus (ystävän ystävä ja käyttöoikeudet)
Tokeneilla voidaan rakentaa sovelluksia, jotka jakavat käyttöoikeuksia toisen kanssa. Esimerkiksi, olemme linkittäneet satunnaisia sosiaalisia tilejä meidän suuria, kuten Facebook tai Twitter.
kun kirjaudumme Twitteriin palvelun kautta (sanotaan vaikka Puskuri), annamme Bufferin lähettää Twitter-virtaamme.
käyttämällä tokens, näin tarjoamme selektiivisiä käyttöoikeuksia kolmannen osapuolen sovelluksille. Voisimme jopa rakentaa oman API: n ja jakaa erityislupakkeita, jos käyttäjämme haluaisivat antaa pääsyn tietoihinsa toiselle sovellukselle.
useat alustat ja verkkotunnukset
puhuimme hieman CORSISTA aiemmin. Kun sovelluksemme ja palvelumme laajenee, meidän on tarjottava pääsy kaikenlaisiin laitteisiin ja sovelluksiin (koska sovelluksestamme tulee ehdottomasti suosittu!).
SOVELLUSLIITTYMÄMME vain palvelee dataa, joten voimme myös tehdä suunnitteluvalinnan CDN: n varojen palvelemiseksi. Tämä poistaa Corsin esiin tuomat ongelmat, kun olemme asettaneet sovelluksellemme nopean otsikkokokoonpanon.
Access-Control-Allow-Origin: *
tietomme ja resurssimme ovat nyt käytettävissä minkä tahansa verkkotunnuksen pyyntöihin niin kauan kuin käyttäjällä on voimassa oleva token.
standardeihin perustuva
tunnusta luotaessa on muutama vaihtoehto. Tulemme sukellus enemmän tähän aiheeseen, kun turvaamme API seuranta artikkeli, mutta standardi käyttää olisi JSON Web Tokens.
tämä kätevä debuggeri-ja kirjastokaavio näyttää tuen JSON Web Tokeneille. Voit nähdä, että se on suuri määrä tukea eri kielillä. Tämä tarkoittaa, että voit itse vaihtaa todennusmekanismin pois, jos päätät tehdä niin tulevaisuudessa!
johtopäätös
tämä oli vain katsaus token-pohjaisen todennuksen miten ja miksi. Kuten aina turvallisuusmaailmassa, kuhunkin aiheeseen liittyy paljon enemmän ja se vaihtelee käyttötapauksittain. Sukelsimme jopa joihinkin aiheisiin skaalautuvuudesta, joka ansaitsee myös oman keskustelunsa.
tämä oli korkean tason nopea katsaus, joten voit vapaasti huomauttaa mitä tahansa jäi tai kysymyksiä sinulla on asiasta.
seuraavassa artikkelissamme tarkastelemme JSON Web Tokensin anatomiaa.
huomautus: lisätään ACAO: n otsikkotiedot ja CSRF: n selvennykset (Kiitos Emily Starkin artikkelitiedoista)