Integrasi Aliran Kata Laluan OAuth2
Sepadukan aliran kata laluan OAuth2 untuk log masuk pengguna dan mendapatkan token dalam aplikasi FastAPI anda.
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 pengepalaAuthorization: Bearerbagi permintaan masuk.OAuth2PasswordRequestForm: Kebergantungan yang menghuraikanusernamedanpasswordsecara 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_userMemahami get_current_user
Fungsi get_current_user ialah kebergantungan yang amat penting. Fungsi ini melaksanakan dua tugas utama:
- Ekstrak Token: Menggunakan
oauth2_scheme = Depends(OAuth2PasswordBearer(...))untuk mendapatkan token daripada pengepalaAuthorization. - 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
Useryang sepadan. Jika tidak sah atau tiada, fungsi ini menimbulkanHTTPException.
Cara Klien Berinteraksi
Berikut ialah interaksi klien biasa dengan Aliran Kata Laluan OAuth2:
- Klien (contohnya, aplikasi mudah alih) menghantar permintaan
POSTke/tokendengan nama pengguna dan kata laluan dalam data borang. - Jika berjaya, API mengembalikan
access_token(contohnya,{"access_token": "abc.123.xyz", "token_type": "bearer"}). - 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
OAuth2PasswordBearerdengantokenUrl. - Anda mencipta titik akhir
/tokenmenggunakanOAuth2PasswordRequestFormuntuk mengendalikan log masuk pengguna. - Anda memahami cara mengesahkan pengguna dan mengeluarkan token akses.
- Anda melindungi titik akhir dengan menggunakan kebergantungan
get_current_useruntuk mengekstrak dan mengesahkan token akses.
Seterusnya, anda boleh meneroka Kawalan Akses Berasaskan Peranan (RBAC) untuk menambahkan keizinan yang lebih terperinci berdasarkan peranan pengguna!
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
- Pendaftaran dan Log Masuk Pengguna
- Penjanaan dan Pengesahan Token JWT
- JWT untuk Pengesahan Tanpa Keadaan
- Integrasi Aliran Kata Laluan OAuth2
- Kawalan Akses Berasaskan Peranan
- Kawalan Akses Berasaskan Peranan (RBAC)