Node.js-taustakehityksen bootcamp · Oppitunti

JWT-tunnusten luonti ja validointi

Tutustukaa JSON Web Token -tunnuksiin (JWT) ja toteuttakaa niiden luonti ja validointi suojattua API-käyttöä varten.

Oppitunti 2/612 vaihetta

JWT-tunnusten luonti ja validointi on ilmainen Node.js-taustakehityksen bootcamp-oppitunti CoddyKitissä. Tämä on oppitunti 2/6. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Node.js-taustakehityksen bootcamp-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 6 oppituntia.

JWT:n perusteet: mitä ja miksi

Tervetuloa! Tässä oppitunnissa perehdymme JSON Web Tokeneihin (JWT), jotka ovat suosittu tapa suojata rajapintoja.

JWT on tiivis ja URL-ystävällinen tapa esittää kahden osapuolen välillä siirrettäviä väitteitä. Voitte ajatella sitä rajapintanne digitaalisena henkilökorttina.

Miksi käyttää JWT-tunnisteita rajapinnoissa?

JWT-tunnisteet tarjoavat useita etuja nykyaikaisille verkko- ja mobiilirajapinnoille:

  • Tilattomuus: Palvelimen ei tarvitse tallentaa istuntotietoja. Jokainen pyyntö sisältää käyttäjän todennustiedot.
  • Skaalautuvuus: Sovellusten horisontaalinen skaalaaminen on helpompaa, koska palvelinten välillä ei ole jaettua istuntotilaa.
  • Tietoturva: Oikein toteutettuina JWT-tunnisteet tarjoavat turvallisen tavan varmistaa käyttäjän henkilöllisyys ja estää tietojen peukalointi.

JWT:n rakenne: kolme osaa

JWT on pisteillä (.) erotetuista kolmesta osasta koostuva merkkijono. Jokainen osa on Base64Url-koodattu:

HEADER.PAYLOAD.SIGNATURE

Seuraavaksi tarkastelemme, mitä kukin näistä osista tarkoittaa ja miksi ne ovat tärkeitä tietoturvan kannalta.

JWT:n otsake

Header koostuu yleensä kahdesta osasta:

  • alg (Algorithm): Määrittää tunnisteen allekirjoittamiseen käytettävän salausalgoritmin (esim. HS256, RS256).
  • typ (Type): Ilmaisee, että tunniste on JWT.

Esimerkki (Base64Url-koodaus purettu):

{"alg": "HS256", "typ": "JWT"}

JWT:n hyötykuorma (väitteet)

Payload sisältää ”väitteet” eli entiteettiä (kuten käyttäjää) koskevia lausumia ja muita tietoja.

Väitteet voivat olla:

  • Rekisteröityjä: Vakiokenttiä, kuten iss (myöntäjä), exp (vanhenemisaika) ja sub (aihe).
  • Julkisia: IANA:n JWT-rekisteriin rekisteröityjä mukautettuja väitteitä.
  • Yksityisiä: Lähettäjän ja vastaanottajan yhdessä sopimia mukautettuja väitteitä.

Esimerkki hyötykuormasta:

{"sub": "user123", "name": "Alice", "exp": 1678886400}

JWT:n allekirjoitus

Signature on ratkaisevan tärkeä tunnisteen aitouden ja eheyden varmistamisessa. Se varmistaa, ettei tunnistetta ole peukaloitu.

Allekirjoitus luodaan ottamalla koodattu otsake, koodattu hyötykuorma, salainen avain ja otsakkeessa määritetty algoritmi ja allekirjoittamalla ne.

Kaava (yksinkertaistettuna):

HMACSHA256(encodedHeader + "." + encodedPayload, secretKey)

Python: JWT:n luominen

Luodaan JWT Pythonin PyJWT-kirjaston avulla. Asentakaa se ensin: pip install PyJWT.

Määrittelemme hyötykuorman, joka sisältää vanhenemisajan, sekä salaisen avaimen.

import jwt
import datetime

def main():
    SECRET_KEY = "your-super-secret-key"

    # Define payload with some claims
    payload = {
        "sub": "user123",
        "name": "Alice",
        "exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=30),
        "iat": datetime.datetime.utcnow()
    }

    # Encode the token
    token = jwt.encode(payload, SECRET_KEY, algorithm="HS256")
    print(f"Generated JWT: {token}")

if __name__ == "__main__":
    main()

Salaiset avaimet ja tietoturva

JWT-tunnisteiden allekirjoittamiseen ja varmistamiseen käytettävä SECRET_KEY on erittäin tärkeä. Jos tämä avain vaarantuu, hyökkääjä voi väärentää kelvollisia tunnisteita ja saada luvattoman käyttöoikeuden.

  • Käyttäkää aina vahvaa, satunnaisesti luotua avainta.
  • Älkää koskaan kirjoittako sitä kiinteästi sovellukseen, vaan käyttäkää ympäristömuuttujia tai turvallista avaintenhallintapalvelua.
  • Pidättehän sen ehdottoman luottamuksellisena!

Python: JWT:n vahvistaminen

JWT:n vahvistamiseksi puratte sen käyttämällä samaa salaista avainta ja algoritmia. PyJWT varmistaa allekirjoituksen automaattisesti ja tarkistaa väitteet, kuten vanhenemisen (`exp`).

import jwt
import datetime
import time

def main():
    SECRET_KEY = "your-super-secret-key"

    # Generate a token to validate (short expiry for demo)
    payload_gen = {
        "sub": "user123",
        "name": "Bob",
        "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=5), 
        "iat": datetime.datetime.utcnow()
    }
    token_to_validate = jwt.encode(payload_gen, SECRET_KEY, algorithm="HS256")
    print(f"Token to validate: {token_to_validate}\n")
    time.sleep(1) # Wait a bit for demonstration

    # Attempt to decode/validate it
    try:
        decoded_payload = jwt.decode(token_to_validate, SECRET_KEY, algorithms=["HS256"])
        print("Token is valid!")
        print(f"Decoded Payload: {decoded_payload}")
    except jwt.ExpiredSignatureError:
        print("Token has expired!")
    except jwt.InvalidTokenError:
        print("Invalid token (e.g., bad signature or format).")

if __name__ == "__main__":
    main()

JWT:n parhaat käytännöt

Pidätte JWT-toteutuksen turvallisena seuraavasti:

  • Asettakaa vanheneminen (exp): Sisällyttäkää aina vanhenemista ilmaiseva väite, jotta vaarantuneen tunnisteen käyttöaika rajoittuu.
  • HTTPS: Välittäkää JWT-tunnisteet aina HTTPS-yhteyden kautta salakuuntelun estämiseksi.
  • Turvallinen tallennus: Tallentakaa tunnisteet turvallisesti asiakkaan puolella (esimerkiksi HTTP-only-evästeisiin verkossa ja suojattuun tallennustilaan mobiilissa).
  • Päivitystunnisteet: Käyttäkää pitkissä istunnoissa lyhytkestoisia käyttötunnisteita ja pitkäkestoisempia päivitystunnisteita.

Testatkaa ymmärryksenne

Kerratkaa JWT:n osat. Mikä seuraavista osista vastaa siitä, ettei tunnistetta ole peukaloitu?

Kertaus: JWT:n perusteet

Tässä oppitunnissa tutustuimme JSON Web Tokeneihin (JWT), joita käytetään rajapintojen turvalliseen todentamiseen.

  • JWT-tunnisteet ovat tiiviitä ja URL-ystävällisiä tunnisteita, joissa on otsake, hyötykuorma ja allekirjoitus.
  • Otsake määrittää tunnisteen tyypin ja allekirjoitusalgoritmin.
  • Hyötykuorma sisältää ”väitteet” eli tietoja, kuten käyttäjätunnuksen, roolit ja vanhenemisajan.
  • Allekirjoitus varmistaa tunnisteen eheyden ja aitouden.
  • Opimme luomaan ja vahvistamaan JWT-tunnisteita Pythonin PyJWT-kirjaston avulla.
  • Käyttäkää aina vahvoja, salaisia avaimia ja asettakaa vanhenemisajat tietoturvan varmistamiseksi.

Seuraavaksi integroimme JWT-tunnisteet FastAPIin OAuth2:n avulla täydellistä todennusprosessia varten!

Aloita maksutta

Opi JavaScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
22
Oppitunnit
92

Usein kysytyt kysymykset

Onko oppitunti ”JWT-tunnusten luonti ja validointi” ilmainen?

Kyllä – oppitunnin ”JWT-tunnusten luonti ja validointi” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Node.js-taustakehityksen bootcamp-kurssin, päivitä CoddyKit PROhon. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 6 oppituntia.

Mitä opin oppitunnilla ”JWT-tunnusten luonti ja validointi”?

Tutustukaa JSON Web Token -tunnuksiin (JWT) ja toteuttakaa niiden luonti ja validointi suojattua API-käyttöä varten. Harjoittelet Node.js-taustakehityksen bootcamp-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Node.js-taustakehityksen bootcamp-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Node.js-taustakehityksen bootcamp-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/6.

Kuinka kauan ”JWT-tunnusten luonti ja validointi”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Node.js-taustakehityksen bootcamp-oppitunnilla?

Kyllä. Jokainen Node.js-taustakehityksen bootcamp-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Käyttäjän rekisteröityminen ja kirjautuminen
  2. JWT-tunnusten luonti ja validointi
  3. JWT tilattomaan todennukseen
  4. OAuth2-salasanavirran integrointi
  5. Roolipohjainen käyttöoikeuksien hallinta
  6. Roolipohjainen käyttöoikeuksien hallinta (RBAC)
← Takaisin: Node.js-taustakehityksen bootcamp