Monivaiheinen tunnistautuminen (MFA) lisää merkittävän turvakerroksen vaatimalla käyttäjältä kahta tai useampaa todentamistekijää resurssin käyttöoikeuden saamiseksi. Perinteisen salasanan lisäksi tarvitaan jotain, mitä käyttäjä omistaa, kuten laite, jossa pyörii autentikointisovellus. FastAPI-sovelluksessa MFA:n toteuttamisessa käytetään usein ajastettua kertakäyttöistä salasanaa (TOTP), joka on lyhytaikaisesti voimassa oleva numerosarja, yleensä kuudesta kahdeksaan numeroa, vaihtuen 30 sekunnin välein.
Ennen toteutusta tulee varmistaa, että sovelluksessa on tarvittavat kirjastot, kuten pyotp. Käyttäjätauluun lisätään kenttä totp_secret, johon tallennetaan käyttäjän TOTP-salasana tai avain, jonka avulla varmennetaan syötetty koodi. Tämän jälkeen luodaan apufunktiot TOTP-avaimen ja URI:n generointiin. URI toimii linkkinä tai QR-koodina, jonka käyttäjä voi skannata autentikointisovelluksella.
MFA:n aktivointi tapahtuu FastAPI-reitillä, joka luo ja tallentaa käyttäjälle TOTP-avaimen ja palauttaa URI:n sekä tilapäisen koodin, jota käytetään sovelluksen alkuasetuksissa. Seuraavassa vaiheessa luodaan reitti, joka vahvistaa käyttäjän syöttämän koodin verraten sitä tallennettuun TOTP-avaimeen. Mikäli koodi on virheellinen tai MFA ei ole aktivoitu, pyyntö hylätään. Tämä varmistaa, että pelkällä salasanalla ei pääse käsiksi sovellukseen, vaan käyttäjä tarvitsee myös toisen varmistustavan, kuten puhelimeensa asennetun autentikointisovelluksen.
API-avaimet ovat toinen tapa hallita sovelluksen käyttöoikeuksia. Ne toimivat yksilöllisinä tunnisteina, jotka vaaditaan jokaisessa API-kutsussa, yleensä HTTP-pyyntöjen otsikoissa. FastAPI ei sisällä valmista tukea API-avaimille, mutta niiden hallinta on helppoa toteuttaa riippuvuuksien avulla. Avainlista voidaan säilyttää esimerkiksi kovakoodattuna kehitysympäristössä, mutta tuotantoympäristössä avaimien hallinta kannattaa delegoida erillisiin järjestelmiin tai kirjastoihin, jotka mahdollistavat avainten kierrätyksen ja turvallisen säilytyksen.
API-avaimen validointireitti tarkistaa pyyntöön liitetyn avaimen oikeellisuuden ja estää pääsyn, jos avain on virheellinen. Näin voidaan rajoittaa pääsy vain niille käyttäjille tai palveluille, joille on myönnetty lupa. Käytännössä API-avainten käyttö edellyttää aina suojattua yhteyttä HTTPS:n kautta, jotta avaimet eivät päädy ulkopuolisten käsiin siirron aikana. Lisäksi on suositeltavaa kierrättää avaimia säännöllisesti ja rajoittaa niiden käyttöoikeuksia mahdollisimman vähäiseen tarpeeseen, noudattaen vähimmän oikeuden periaatetta.
Turvallisuuden näkökulmasta on keskeistä ymmärtää, että MFA ja API-avaimet täydentävät toisiaan. MFA suojaa loppukäyttäjän tilit, kun taas API-avaimet hallinnoivat sovelluksen ohjelmallisia pääsyoikeuksia. Yhdessä ne muodostavat kokonaisuuden, jossa sekä ihmiskäyttäjän että koneiden pääsy kontrolloidaan monitasoisesti. Lisäksi on tärkeää varmistaa, että sovelluksen tietokanta ja muut säilytysjärjestelmät suojaavat herkkiä tietoja, kuten TOTP-avaimia ja API-avaimia, asianmukaisin salauksin.
Kokonaisuudessaan FastAPI tarjoaa joustavan alustan näiden turvamekanismien integrointiin, mikä mahdollistaa sovelluksen suojauksen nykyaikaisia uhkia vastaan. On tärkeää, että kehittäjä ymmärtää myös uhkakuvat, kuten avainten vuotaminen tai käyttäjän laitteen kompromettoituminen, ja suunnittelee sovelluksen siten, että mahdolliset riskit minimoidaan esimerkiksi nopealla avainten uudelleen luomisella ja käyttäjien tilien hallinnalla.
Miten käsitellä WebSocket-virheitä ja poikkeuksia FastAPI:ssä?
WebSocket-yhteyksiä voidaan käyttää monenlaisiin reaaliaikaisiin sovelluksiin, mutta niiden hallinta vaatii huolellista virheiden käsittelyä ja yhteyksien tilan seuraamista. FastAPI tarjoaa tehokkaita työkaluja, jotka auttavat hallitsemaan WebSocket-yhteyksien avaamista, sulkemista sekä virheiden ja poikkeusten käsittelyä. Tässä artikkelissa tarkastelemme, kuinka käsitellä WebSocket-virheitä ja poikkeuksia FastAPI-sovelluksissa tehokkaasti.
Yksi tärkeimmistä asioista, jotka on otettava huomioon, on yhteyksien virheellisten sulkemisten ja odottamattomien katkosten hallinta. Kun asiakkaan yhteys katkeaa tai se vastaanottaa virheellisiä tietoja, on tärkeää, että palvelin reagoi oikein ja lähettää asiakaspäähän tiedon tilanteen muuttumisesta.
WebSocket-virheiden käsittely FastAPI:ssä on yksinkertaista, mutta sen avulla voidaan varmistaa, että asiakas saa riittävän tiedon virheistä ja palvelin voi reagoida oikein. Esimerkiksi, kun asiakas lähettää viestin "disconnect", voidaan yhdistys sulkea hallitusti antamalla tilakoodi ja perusteluteksti.
Yllä olevassa koodissa määritellään, että palvelin sulkee yhteyden normaalisti, jos asiakas lähettää viestin "disconnect". Tässä yhteydessä määritellään tilakoodi 1000 (normaali sulkeminen) ja annetaan syyksi "Yhdistetään...". Tämä auttaa asiakasta ymmärtämään, että yhteys on suljettu hallitusti, eikä kyseessä ollut virhetilanne.
WebSocketException-luokan käyttö virhetilanteissa
Jos asiakkaalta saapuu virheellinen viesti, kuten "bad message", voidaan käyttää WebSocketException-luokkaa, joka antaa palvelimen sulkea yhteyden ja lähettää virheilmoituksen asiakkaalle. Näin voidaan varmistaa, että asiakas ei jää hämmentyneeksi ja tietää tarkalleen, miksi yhteys on katkennut.
Tässä esimerkissä asiakas erotetaan yhteydestä, jos se lähettää "bad message" -viestin, ja virheilmoitus 1008 POLICY_VIOLATION lähetetään takaisin asiakkaille. Tämä varmistaa, että virheellistä käyttäytymistä voidaan hallita ja estää, ja se tiedottaa asiakasta virheellisestä toiminnasta.
WebSocket-virheiden käsittely
WebSocket-yhteyksien virheiden ja poikkeusten käsittely on tärkeää, jotta voidaan estää palvelimen kaatuminen tai muiden vakavien ongelmien syntyminen. Yleisiä virheitä, jotka voivat ilmetä WebSocket-yhteyksien aikana, ovat:
-
Yhteysvirheet, kuten verkon katkeaminen tai palvelimen kaatuminen.
-
Viestin jäsentämisvirheet, kun asiakas lähettää virheellistä dataa.
-
Yhteyden odottamaton sulkeminen, kuten asiakas sulkee selaimen ennen yhteyden sulkemista.
Näihin virheisiin voidaan reagoida esimerkiksi nostamalla sopivia poikkeuksia, jotka voidaan käsitellä sovelluksessa. FastAPI tarjoaa WebSocketDisconnect-poikkeuksen, joka on kätevä silloin, kun asiakas katkaisee yhteyden itse.
Tässä tapauksessa WebSocketDisconnect käsitellään, ja palvelin loggaa, että asiakas sulki yhteyden itse. Tämä auttaa seuraamaan käyttäjän toimia ja mahdollisia virheitä.
WebSocketin statuskoodit ja niiden käyttö
Vaikka WebSocket-protokolla ei käytä yhtä laajasti statuskoodeja kuin HTTP, sen avulla voidaan silti lähettää tilatietoja asiakkaalle yhteyden sulkemisen yhteydessä. WebSocketin sulkemiskoodit perustuvat IANA-standardeihin, ja niitä voidaan käyttää erilaisten tilanteiden kuvaamiseen. Esimerkiksi koodit kuten 1000 (normaali sulkeminen) ja 1008 (politiikkarikko) auttavat kommunikoimaan asiakkaille, miksi yhteys on katkennut.
Tarkempia tietoja WebSocketin sulkemiskoodien määrittelystä ja niiden käytöstä löytyy virallisista dokumenteista, kuten IANA:n ja Mozilla Developer Networkin sivuilta.
WebSocket-virheiden ja poikkeusten kommunikoiminen
WebSocket-virheiden ja poikkeusten käsittely ei ole pelkästään ohjelmistojen vakauden kannalta tärkeää, vaan myös asiakaskokemuksen kannalta. Kun asiakas tietää, miksi yhteys on katkennut ja mitä tapahtuu, se voi parantaa käyttökokemusta ja helpottaa virheiden ratkaisemista.
Virheiden ja poikkeusten hallinta WebSocketin kautta mahdollistaa paremman virheiden diagnosoinnin ja asiakastuen tarjoamisen, koska asiakkaalle voidaan välittää tarkempia tietoja virheistä ja niiden syistä.
Kuinka ottaa käyttöön HTTPS FastAPI-sovelluksessa
Kun työskentelet web-sovelluksen kanssa, tietoturva on aina tärkeä osa sovelluksen kehitystä. Yksi perusratkaisu verkkosovellusten suojaamiseen on käyttää Hypertext Transfer Protocol Secure (HTTPS) -protokollaa. HTTPS salaa palvelimen ja asiakkaan välillä kulkevan tiedon, estäen luvattoman pääsyn ja tiedon manipuloinnin. Tässä ohjeessa käymme läpi, kuinka voit ottaa HTTPS-yhteyden käyttöön FastAPI-sovelluksessa, ja kuinka varmistaa sen toimivuus myös paikallisessa kehityksessä.
Ennen kuin aloitamme, on hyvä ymmärtää hieman taustatietoa HTTPS:sta ja SSL/TLS-sertifikaateista. HTTPS suojaa verkkosivuston ja sen käyttäjän välisen liikenteen, ja se on elintärkeä kaikille, jotka haluavat varmistaa tietojensa turvallisuuden. SSL/TLS-sertifikaatti on digitaalinen todistus siitä, että verkkosivusto on luotettava ja että sen tarjoama liikenne on salattu. Lokalisoinnin osalta voit luottaa erityisiin paikallisiin sertifikaatteihin, joita voidaan luoda työkaluilla, kuten mkcert.
Sertifikaatin luominen ja HTTPS-yhteyden käyttöönotto
Aloitamme varmistamalla, että sinulla on tarvittavat työkalut asennettuna. Tässä tapauksessa käytämme mkcert-työkalua, joka on helppo tapa luoda paikallisia SSL/TLS-sertifikaatteja ilman, että tarvitsee hankkia niitä kaupalliselta toimittajalta. Asenna mkcert ensin järjestelmääsi seuraamalla sen asennusohjeita. Asennuksen jälkeen varmista, että se toimii ajamalla komento:
Kun työkalun asennus on valmis, aloitetaan sertifikaattien luominen. Ensimmäiseksi meidän tulee varmistaa, että selain luottaa paikallisiin sertifikaatteihin, jotka luomme. Tämä onnistuu komennolla:
Tämä komento asentaa paikallisen sertifikaatin järjestelmän luotettavien sertifikaattien tallennuspaikkaan, jotta selain hyväksyy sen automaattisesti luotettavana lähteenä.
Seuraavaksi luomme sertifikaatin ja yksityisen avaimen palvelimen käyttämiseksi paikallisessa kehityksessä. Tämä tapahtuu seuraavalla komennolla:
Tämä komento luo kaksi tiedostoa: example.com+5-key.pem (avain) ja example.com+5.pem (sertifikaatti). On tärkeää muistaa, että nämä tiedostot eivät saa päätyä versionhallintaan, joten lisää ne .gitignore-tiedostoon, jotta vältetään niiden vahingossa julkistaminen.
HTTPS-palvelimen käynnistäminen
Jatkamme asettamalla serverin käyttämään luotua sertifikaattia ja avainta. FastAPI:n oma komento ei suoraan tue näiden tiedostojen asettamista, joten käynnistämme palvelimen uvicorn-komennolla seuraavasti:
Tämä komento käynnistää FastAPI-sovelluksen HTTPS-yhteydellä, jossa käytetään juuri luotuja sertifikaatteja ja avaimia. Kun palvelin on käynnissä, voit testata HTTPS-yhteyden avaamalla selaimen ja siirtymällä osoitteeseen https://localhost:443. Osoiterivillä näkyvä lukon kuvake kertoo, että yhteys on suojattu HTTPS-protokollalla.
Jos yrität päästä sovellukseen käyttämällä HTTP-protokollaa (esimerkiksi http://localhost:443), saat virheilmoituksen, koska palvelin kuuntelee vain HTTPS-yhteyksiä portissa 443.
HTTPS:n pakottaminen palvelimella
Kun HTTPS on otettu käyttöön, haluamme varmistaa, että kaikki liikenne menee suojattua HTTPS-yhteyttä pitkin. Tämän voi tehdä lisäämällä FastAPI-sovellukseen välimuistin, joka ohjaa automaattisesti HTTP-pyynnöt HTTPS:ään.
Tätä varten muokkaamme main.py-tiedostoa seuraavasti:
Tämä välimuisti ohjaa kaiken HTTP-liikenteen automaattisesti HTTPS:ään, mikä parantaa sovelluksen turvallisuutta ja varmistaa, että käyttäjät eivät vahingossa pääse käyttämään suojaamattomia yhteyksiä.
Lisätietoa ja tuotantokäyttö
Vaikka tämä ohje kattaa perusasetukset paikalliselle kehitykselle, on tärkeää ymmärtää, että tuotantoympäristössä HTTPS:n käyttöönotto on monivaiheinen prosessi, joka vaatii huolellista suunnittelua ja varautumista. Paikalliset sertifikaatit, kuten mkcertin luomat, ovat vain testikäyttöä varten. Tuotannossa tulee käyttää virallisia sertifikaatteja, jotka on hankittu luotetuilta sertifikaatin myöntäjiltä, kuten Let's Encrypt tai muut kaupalliset sertifikaattivalmistajat.
Lisäksi tuotantoympäristössä on tärkeää huolehtia palvelimen riittävästä suorituskyvystä, varmistaa, että HTTPS-yhteydet ovat asianmukaisesti konfiguroituja ja että salauksen taso vastaa parhaita käytäntöjä.
Tässä käsitellyt ohjeet tarjoavat hyvän pohjan FastAPI-sovellusten kehittämiselle ja käyttöönotolle HTTPS:n avulla. Tämä suojaa käyttäjien tietoja ja varmistaa, että sovelluksesi liikenne on turvallista ja luotettavaa.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский