Kem Intensif Pembangunan Backend Node.js · Pelajaran

Integrasi Aliran Kata Laluan OAuth2

Sepadukan aliran kata laluan OAuth2 untuk log masuk pengguna dan mendapatkan token dalam aplikasi FastAPI anda.

Pelajaran 4 daripada 610 langkah

Integrasi Aliran Kata Laluan OAuth2 ialah pelajaran Kem Intensif Pembangunan Backend Node.js percuma di CoddyKit. Ini ialah pelajaran 4 daripada 6. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kem Intensif Pembangunan Backend Node.js, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kem Intensif Pembangunan Backend Node.js merangkumi sejumlah 6 pelajaran.

Pengenalan kepada Aliran Kata Laluan OAuth2

Selamat datang! Pelajaran ini memfokuskan pengintegrasian Aliran Kata Laluan OAuth2 dalam FastAPI. Ini ialah cara standard dan selamat untuk pengguna log masuk ke aplikasi anda.

Aliran ini membolehkan pengguna memberikan nama pengguna dan kata laluan mereka terus kepada API anda. Jika berjaya, API anda mengeluarkan token akses, yang kemudiannya digunakan oleh pengguna untuk mengakses sumber yang dilindungi.

Mengapa Menggunakan Aliran Kata Laluan?

Aliran Kata Laluan OAuth2 amat sesuai untuk aplikasi pihak pertama, seperti aplikasi mudah alih atau bahagian hadapan web anda sendiri, yang kliennya anda percayai sepenuhnya.

  • Keselamatan: Ini ialah piawaian keselamatan yang digunakan secara meluas dan difahami dengan baik.
  • Kesederhanaan: Menyediakan pengalaman log masuk yang mudah untuk pengguna.
  • Berasaskan token: Selepas log masuk, pengguna menerima token, jadi kelayakan tidak perlu dihantar bersama setiap permintaan.

Komponen Utama FastAPI

FastAPI menyediakan utiliti khusus untuk memudahkan pelaksanaan Aliran Kata Laluan OAuth2:

  • OAuth2PasswordBearer: Kebergantungan yang mengekstrak token akses daripada pengepala Authorization: Bearer bagi permintaan masuk.
  • OAuth2PasswordRequestForm: Kebergantungan yang menghuraikan username dan password secara automatik daripada data borang yang dihantar semasa permintaan log masuk.

Kita akan menggabungkan semua ini dengan sistem Dependency Injection FastAPI yang berkuasa.

Menyediakan OAuth2PasswordBearer

Mula-mula, kita perlu memulakan OAuth2PasswordBearer. Parameter tokenUrl amat penting; parameter ini memberitahu klien tempat untuk menghantar kelayakan log masuk mereka bagi mendapatkan token akses.

URL ini akan menjadi laluan ke titik akhir log masuk kita.

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!

Titik Akhir Log Masuk: /token

Inilah titik akhir utama tempat pengguna menghantar nama pengguna dan kata laluan mereka. Biasanya, ini ialah permintaan POST.

Kita menggunakan OAuth2PasswordRequestForm sebagai kebergantungan. FastAPI menghuraikan data borang masuk secara automatik dan menyediakan atribut username serta password.

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!

Kod Lengkap: Log Masuk dan Titik Akhir Dilindungi

Berikut ialah aplikasi FastAPI lengkap yang menunjukkan Aliran Kata Laluan OAuth2. Aplikasi ini merangkumi titik akhir /token untuk log masuk dan titik akhir /users/me/ yang dilindungi oleh token akses.

Jalankan kod ini: Simpan sebagai main.py, kemudian jalankan uvicorn main:app --reload. Akses dokumentasi di 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

Memahami get_current_user

Fungsi get_current_user ialah kebergantungan yang amat penting. Fungsi ini melaksanakan dua tugas utama:

  1. Ekstrak Token: Menggunakan oauth2_scheme = Depends(OAuth2PasswordBearer(...)) untuk mendapatkan token daripada pengepala Authorization.
  2. Sahkan dan Dapatkan Pengguna: Menyahkod dan mengesahkan token (menggunakan logik JWT daripada Pelajaran 1 dalam aplikasi sebenar). Jika sah, fungsi ini mendapatkan dan mengembalikan objek User yang sepadan. Jika tidak sah atau tiada, fungsi ini menimbulkan HTTPException.

Cara Klien Berinteraksi

Berikut ialah interaksi klien biasa dengan Aliran Kata Laluan OAuth2:

  1. Klien (contohnya, aplikasi mudah alih) menghantar permintaan POST ke /token dengan nama pengguna dan kata laluan dalam data borang.
  2. Jika berjaya, API mengembalikan access_token (contohnya, {"access_token": "abc.123.xyz", "token_type": "bearer"}).
  3. Untuk permintaan dilindungi yang seterusnya, klien menyertakan token ini dalam pengepala Authorization: Authorization: Bearer abc.123.xyz.

Semakan Pantas: Komponen OAuth2

Komponen FastAPI manakah yang bertanggungjawab terutamanya untuk menghuraikan nama pengguna dan kata laluan daripada permintaan log masuk masuk (data borang)?

Ulang Kaji: Aliran Kata Laluan OAuth2

Anda telah berjaya mengintegrasikan Aliran Kata Laluan OAuth2 dalam FastAPI!

  • Anda memulakan OAuth2PasswordBearer dengan tokenUrl.
  • Anda mencipta titik akhir /token menggunakan OAuth2PasswordRequestForm untuk mengendalikan log masuk pengguna.
  • Anda memahami cara mengesahkan pengguna dan mengeluarkan token akses.
  • Anda melindungi titik akhir dengan menggunakan kebergantungan get_current_user untuk mengekstrak dan mengesahkan token akses.

Seterusnya, anda boleh meneroka Kawalan Akses Berasaskan Peranan (RBAC) untuk menambahkan keizinan yang lebih terperinci berdasarkan peranan pengguna!

Percuma untuk bermula

Pelajari JavaScript dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
22
Pelajaran
92

Soalan Lazim

Adakah pelajaran “Integrasi Aliran Kata Laluan OAuth2” percuma?

Ya — teks penuh “Integrasi Aliran Kata Laluan OAuth2” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Kem Intensif Pembangunan Backend Node.js, tingkat taraf kepada CoddyKit PRO. Kursus Kem Intensif Pembangunan Backend Node.js merangkumi sejumlah 6 pelajaran.

Apakah yang akan saya pelajari dalam “Integrasi Aliran Kata Laluan OAuth2”?

Sepadukan aliran kata laluan OAuth2 untuk log masuk pengguna dan mendapatkan token dalam aplikasi FastAPI anda. Anda berlatih Kem Intensif Pembangunan Backend Node.js menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Kem Intensif Pembangunan Backend Node.js?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Kem Intensif Pembangunan Backend Node.js di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 6.

Berapa lamakah pelajaran “Integrasi Aliran Kata Laluan OAuth2” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kem Intensif Pembangunan Backend Node.js ini?

Ya. Setiap pelajaran Kem Intensif Pembangunan Backend Node.js menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pendaftaran dan Log Masuk Pengguna
  2. Penjanaan dan Pengesahan Token JWT
  3. JWT untuk Pengesahan Tanpa Keadaan
  4. Integrasi Aliran Kata Laluan OAuth2
  5. Kawalan Akses Berasaskan Peranan
  6. Kawalan Akses Berasaskan Peranan (RBAC)
← Kembali ke Kem Intensif Pembangunan Backend Node.js