Node.js-taustakehityksen bootcamp · Oppitunti

OAuth2-salasanavirran integrointi

Integroikaa OAuth2-salasanavirta käyttäjien kirjautumista ja tunnusten hankkimista varten FastAPI-sovelluksessanne.

Oppitunti 4/610 vaihetta

OAuth2-salasanavirran integrointi on ilmainen Node.js-taustakehityksen bootcamp-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.

Johdatus OAuth2:n salasanavirtaan

Tervetuloa! Tässä oppitunnissa keskitytään OAuth2:n salasanavirran integroimiseen FastAPIin. Se on vakiintunut ja turvallinen tapa, jolla käyttäjät voivat kirjautua sovellukseen.

Tässä virrassa käyttäjät antavat käyttäjänimensä ja salasanansa suoraan rajapinnalle. Jos kirjautuminen onnistuu, rajapinta myöntää käyttötunnisteen, jonka avulla käyttäjä voi käyttää suojattuja resursseja.

Miksi käyttää salasanavirtaa?

OAuth2:n salasanavirta sopii erityisesti ensimmäisen osapuolen sovelluksiin, kuten omaan mobiilisovellukseen tai verkkokäyttöliittymään, jossa luotatte täysin asiakkaaseen.

  • Tietoturva: Se on laajalti käytetty ja hyvin tunnettu tietoturvastandardi.
  • Yksinkertaisuus: Se tarjoaa käyttäjille suoraviivaisen kirjautumiskokemuksen.
  • Tunnistepohjaisuus: Kirjautumisen jälkeen käyttäjä saa tunnisteen, joten kirjautumistietoja ei tarvitse lähettää jokaisen pyynnön mukana.

FastAPI:n keskeiset komponentit

FastAPI tarjoaa erityisiä apuohjelmia, joiden avulla OAuth2:n salasanavirran toteuttaminen on helppoa:

  • OAuth2PasswordBearer: Riippuvuus, joka poimii käyttötunnisteen saapuvien pyyntöjen Authorization: Bearer -otsakkeesta.
  • OAuth2PasswordRequestForm: Riippuvuus, joka jäsentää automaattisesti kirjautumispyynnön mukana lähetetyistä lomaketiedoista username- ja password-arvot.

Yhdistämme nämä FastAPI:n tehokkaaseen riippuvuuksien injektointi -järjestelmään.

OAuth2PasswordBearerin määrittäminen

Ensin meidän on alustettava OAuth2PasswordBearer. tokenUrl-parametri on ratkaisevan tärkeä: se kertoo asiakkaille, mihin kirjautumistiedot lähetetään käyttötunnisteen saamiseksi.

Tämä URL-osoite on kirjautumisen päätepisteen polku.

from fastapi import FastAPI
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()

# 'token' is the URL path where clients will log in
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# We will create a @app.post("/token") endpoint next!

Kirjautumisen päätepiste: /token

Tämä on keskeinen päätepiste, johon käyttäjät lähettävät käyttäjänimensä ja salasanansa. Pyyntö on yleensä POST-pyyntö.

Käytämme riippuvuutena OAuth2PasswordRequestForm-komponenttia. FastAPI jäsentää saapuvat lomaketiedot automaattisesti ja tarjoaa username- ja password-attribuutit.

from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordRequestForm

@app.post("/token")
async def login_for_access_token(
    form_data: OAuth2PasswordRequestForm = Depends()
):
    # 1. Authenticate user (verify username/password)
    # 2. If valid, create an access token
    # 3. Return the token
    pass # Details coming in the next scene!

Koko koodi: kirjautuminen ja suojattu päätepiste

Tässä on täydellinen FastAPI-sovellus, joka havainnollistaa OAuth2:n salasanavirtaa. Se sisältää kirjautumiseen tarkoitetun /token-päätepisteen ja käyttötunnisteella suojatun /users/me/-päätepisteen.

Suorittakaa tämä koodi: Tallentakaa se nimellä main.py ja suorittakaa sitten uvicorn main:app --reload. Avatkaa dokumentaatio osoitteessa http://127.0.0.1:8000/docs.

from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from pydantic import BaseModel
from typing import Optional

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# --- Mock User & Token Logic (Simplified for this lesson) ---
class UserInDB(BaseModel):
    username: str
    hashed_password: str
    disabled: Optional[bool] = None

class CurrentUser(BaseModel):
    username: str
    email: Optional[str] = None
    full_name: Optional[str] = None
    disabled: Optional[bool] = None

fake_users_db = {
    "testuser": UserInDB(username="testuser", hashed_password="password123", disabled=False),
    "disableduser": UserInDB(username="disableduser", hashed_password="securepass", disabled=True)
}

def get_user_from_db(username: str):
    user_data = fake_users_db.get(username)
    if user_data:
        return CurrentUser(username=user_data.username, full_name=f"{user_data.username} Full", email=f"{user_data.username}@example.com", disabled=user_data.disabled)
    return None

def authenticate_user(username: str, password: str):
    user_in_db = fake_users_db.get(username)
    if not user_in_db or user_in_db.hashed_password != password: # In real app, use password hashing
        return None
    return get_user_from_db(username)

def create_access_token(data: dict):
    # In a real app, use `jwt.encode` with a secret key (from Lesson 1)
    return f"mock_jwt_for_{data['sub']}"
# --- End Mock Logic ---

@app.post("/token")
async def login_for_access_token(
    form_data: OAuth2PasswordRequestForm = Depends()
):
    user = authenticate_user(form_data.username, form_data.password)
    if not user:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Incorrect username or password",
            headers={"WWW-Authenticate": "Bearer"},
        )
    if user.disabled:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="Inactive user"
        )
    access_token = create_access_token(data={"sub": user.username})
    return {"access_token": access_token, "token_type": "bearer"}

# Dependency to get the current user from the token
async def get_current_user(token: str = Depends(oauth2_scheme)):
    # In a real app, this would decode and validate the JWT (from Lesson 1)
    if not token.startswith("mock_jwt_for_"):
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid authentication credentials",
            headers={"WWW-Authenticate": "Bearer"},
        )
    username = token.replace("mock_jwt_for_", "")
    user = get_user_from_db(username)
    if user is None or user.disabled:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid authentication credentials or inactive user",
            headers={"WWW-Authenticate": "Bearer"},
        )
    return user

# A Protected Endpoint
@app.get("/users/me/", response_model=CurrentUser)
async def read_users_me(current_user: CurrentUser = Depends(get_current_user)):
    return current_user

get_current_user-funktion ymmärtäminen

get_current_user-funktio on keskeinen riippuvuus. Se suorittaa kaksi päätehtävää:

  1. Tunnisteen poimiminen: Se käyttää oauth2_scheme = Depends(OAuth2PasswordBearer(...)) -määrittelyä tunnisteen hakemiseen Authorization-otsakkeesta.
  2. Käyttäjän vahvistaminen ja hakeminen: Se purkaa ja vahvistaa tunnisteen (oikeassa sovelluksessa käyttäen ensimmäisen oppitunnin JWT-logiikkaa). Jos tunniste on kelvollinen, funktio hakee ja palauttaa vastaavan User-olion. Jos tunniste on virheellinen tai puuttuu, se nostaa HTTPException-poikkeuksen.

Miten asiakkaat toimivat

Tässä on tyypillinen asiakasohjelman toiminta OAuth2:n salasanavirran yhteydessä:

  1. Asiakas (esimerkiksi mobiilisovellus) lähettää POST-pyynnön osoitteeseen /token ja sisällyttää käyttäjänimen ja salasanan lomaketietoihin.
  2. Jos pyyntö onnistuu, rajapinta palauttaa access_token-arvon (esimerkiksi {"access_token": "abc.123.xyz", "token_type": "bearer"}).
  3. Myöhemmissä suojatuissa pyynnöissä asiakas sisällyttää tämän tunnisteen Authorization-otsakkeeseen: Authorization: Bearer abc.123.xyz.

Pikatarkistus: OAuth2-komponentit

Mikä FastAPI-komponentti vastaa ensisijaisesti saapuvan kirjautumispyynnön lomaketiedoissa olevien käyttäjänimen ja salasanan jäsentämisestä?

Kertaus: OAuth2:n salasanavirta

Olette onnistuneesti integroineet OAuth2:n salasanavirran FastAPIin!

  • Alustitte OAuth2PasswordBearer-komponentin määrittämällä sille tokenUrl-arvon.
  • Loitte /token-päätepisteen, joka käyttää OAuth2PasswordRequestForm-komponenttia käyttäjän kirjautumisen käsittelyyn.
  • Opitte todentamaan käyttäjiä ja myöntämään käyttötunnisteita.
  • Suo­jasitte päätepisteitä käyttämällä get_current_user-riippuvuutta käyttötunnisteen poimimiseen ja vahvistamiseen.

Seuraavaksi voitte tutustua roolipohjaiseen käyttöoikeuksien hallintaan (RBAC) ja lisätä tarkemmin määritettyjä käyttäjärooleihin perustuvia oikeuksia!

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 ”OAuth2-salasanavirran integrointi” ilmainen?

Kyllä – oppitunnin ”OAuth2-salasanavirran integrointi” 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 ”OAuth2-salasanavirran integrointi”?

Integroikaa OAuth2-salasanavirta käyttäjien kirjautumista ja tunnusten hankkimista varten FastAPI-sovelluksessanne. 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 4/6.

Kuinka kauan ”OAuth2-salasanavirran integrointi”-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