OAuth2-salasanavirran integrointi
Integroikaa OAuth2-salasanavirta käyttäjien kirjautumista ja tunnusten hankkimista varten FastAPI-sovelluksessanne.
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öjenAuthorization: Bearer-otsakkeesta.OAuth2PasswordRequestForm: Riippuvuus, joka jäsentää automaattisesti kirjautumispyynnön mukana lähetetyistä lomaketiedoistausername- japassword-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_userget_current_user-funktion ymmärtäminen
get_current_user-funktio on keskeinen riippuvuus. Se suorittaa kaksi päätehtävää:
- Tunnisteen poimiminen: Se käyttää
oauth2_scheme = Depends(OAuth2PasswordBearer(...))-määrittelyä tunnisteen hakemiseenAuthorization-otsakkeesta. - 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 nostaaHTTPException-poikkeuksen.
Miten asiakkaat toimivat
Tässä on tyypillinen asiakasohjelman toiminta OAuth2:n salasanavirran yhteydessä:
- Asiakas (esimerkiksi mobiilisovellus) lähettää
POST-pyynnön osoitteeseen/tokenja sisällyttää käyttäjänimen ja salasanan lomaketietoihin. - Jos pyyntö onnistuu, rajapinta palauttaa
access_token-arvon (esimerkiksi{"access_token": "abc.123.xyz", "token_type": "bearer"}). - 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ä silletokenUrl-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.
- Suojasitte 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!
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
- Käyttäjän rekisteröityminen ja kirjautuminen
- JWT-tunnusten luonti ja validointi
- JWT tilattomaan todennukseen
- OAuth2-salasanavirran integrointi
- Roolipohjainen käyttöoikeuksien hallinta
- Roolipohjainen käyttöoikeuksien hallinta (RBAC)