Hub Python Library documentation
OAuth dan FastAPI
OAuth dan FastAPI
OAuth adalah standar terbuka untuk delegasi akses, yang umum digunakan untuk memberikan akses terbatas pada informasi pengguna kepada aplikasi tanpa mengekspos kredensial mereka. Ketika dikombinasikan dengan FastAPI, hal ini memungkinkan Anda untuk membangun API yang aman yang memungkinkan pengguna untuk masuk menggunakan penyedia identitas eksternal seperti Google atau GitHub. Dalam skenario yang umum:
- FastAPI akan mendefinisikan endpoint API dan menangani permintaan HTTP.
- OAuth terintegrasi menggunakan pustaka seperti fastapi.security atau alat eksternal seperti Authlib.
- Ketika pengguna ingin masuk, FastAPI mengalihkan mereka ke halaman login penyedia OAuth.
- Setelah login berhasil, penyedia mengalihkan kembali dengan token.
- FastAPI memverifikasi token ini dan menggunakannya untuk mengotorisasi pengguna atau mengambil data profil pengguna.
Pendekatan ini membantu menghindari penanganan kata sandi secara langsung dan mendelegasikan manajemen identitas ke penyedia yang tepercaya.
Integrasi OAuth Hugging Face di FastAPI
Modul ini menyediakan alat untuk mengintegrasikan Hugging Face OAuth ke dalam aplikasi FastAPI. Modul ini memungkinkan autentikasi pengguna menggunakan platform Hugging Face, termasuk perilaku yang disimulasikan untuk pengembangan lokal dan alur OAuth yang sebenarnya untuk Spaces.
Ikhtisar OAuth
Fungsi attach_huggingface_oauth menambahkan endpoint login, logout, dan callback ke aplikasi FastAPI Anda. Ketika digunakan di Space, fungsi ini terhubung ke sistem OAuth Hugging Face. Ketika digunakan secara lokal, fungsi ini akan menyuntikkan pengguna yang dimock. Klik di sini untuk mempelajari lebih lanjut tentang menambahkan opsi Sign-In with HF ke Space Anda
Bagaimana cara menggunakannya?
from huggingface_hub import attach_huggingface_oauth, parse_huggingface_oauth
from fastapi import FastAPI, Request
app = FastAPI()
attach_huggingface_oauth(app)
@app.get("/")
def greet_json(request: Request):
oauth_info = parse_huggingface_oauth(request)
if oauth_info is None:
return {"msg": "Not logged in!"}
return {"msg": f"Hello, {oauth_info.user_info.preferred_username}!"}Anda mungkin juga tertarik dengan contoh praktis yang mendemonstrasikan OAuth dalam praktik. Untuk implementasi yang lebih komprehensif, lihatlah Space medoidai/GiveBackGPT yang mengimplementasikan HF OAuth dalam aplikasi berskala penuh.
attach_huggingface_oauth
Tambahkan endpoint OAuth ke aplikasi FastAPI untuk memungkinkan login OAuth dengan Hugging Face.
Cara penggunaan:
- Panggil metode ini pada aplikasi FastAPI Anda untuk menambahkan endpoint OAuth.
- Di dalam handler rute Anda, panggil
parse_huggingface_oauth(request)untuk mengambil info OAuth. - Jika pengguna telah masuk, objek OAuthInfo dikembalikan berisi informasi pengguna. Jika tidak,
Noneyang dikembalikan. - Di aplikasi Anda, pastikan untuk menambahkan tautan ke
/oauth/huggingface/logindan/oauth/huggingface/logoutagar pengguna dapat masuk dan keluar.
Contoh:
from huggingface_hub import attach_huggingface_oauth, parse_huggingface_oauth
# Create a FastAPI app
app = FastAPI()
# Add OAuth endpoints to the FastAPI app
attach_huggingface_oauth(app)
# Add a route that greets the user if they are logged in
@app.get("/")
def greet_json(request: Request):
# Retrieve the OAuth info from the request
oauth_info = parse_huggingface_oauth(request) # e.g. OAuthInfo dataclass
if oauth_info is None:
return {"msg": "Not logged in!"}
return {"msg": f"Hello, {oauth_info.user_info.preferred_username}!"}parse_huggingface_oauth
Mengembalikan informasi dari pengguna yang telah masuk sebagai objek OAuthInfo.
Untuk fleksibilitas dan kesiapan jangka panjang, metode ini sangat longgar dalam proses parsing dan tidak memicu error.
Field yang hilang diatur ke None tanpa peringatan.
Kembalikan None jika pengguna tidak masuk (tidak ada info di session cookie).
Lihat attach_huggingface_oauth() untuk contoh cara menggunakan metode ini.
OAuthOrgInfo
kelas huggingface_hub.OAuthOrgInfo
< source >( sub: strname: strpreferred_username: strpicture: strplan: str | None = Nonecan_pay: bool | None = Nonerole_in_org: str | None = Nonesecurity_restrictions: list[typing.Literal['ip', 'token-policy', 'mfa', 'sso']] | None = None )
Parameter
- sub (
str) — Pengidentifikasi unik untuk organisasi. Field OpenID Connect. - name (
str) — Nama lengkap organisasi. Field OpenID Connect. - preferred_username (
str) — Nama pengguna organisasi. Bidang OpenID Connect. - picture (
str) — URL foto profil organisasi. Field OpenID Connect. - plan (
str, opsional) — Rencana organisasi (misalnya, “enterprise”, “team”). Field Hugging Face. - can_pay (
Optional[bool], opsional) — Apakah organisasi memiliki metode pembayaran yang diatur. Field Hugging Face. - role_in_org (
Optional[str], opsional) — Peran pengguna di organisasi. Field Hugging Face. - security_restrictions (
Optional[list[Literal["ip", "token-policy", "mfa", "sso"]]], opsional) — Array of security restrictions yang belum diselesaikan oleh pengguna untuk org ini. Nilai yang mungkin: “ip”, “token-policy”, “mfa”, “sso”. Field Hugging Face.
Informasi tentang organisasi yang terhubung ke pengguna yang masuk menggunakan OAuth.
OAuthUserInfo
kelas huggingface_hub.OAuthUserInfo
< source >( sub: strname: strpreferred_username: stremail_verified: bool | Noneemail: str | Nonepicture: strprofile: strwebsite: str | Noneis_pro: boolcan_pay: bool | Noneorgs: list[huggingface_hub._oauth.OAuthOrgInfo] | None )
Parameter
- sub (
str) — Pengidentifikasi unik untuk pengguna, bahkan dalam kasus penggantian nama. Bidang OpenID Connect. - name (
str) — Nama lengkap pengguna. Bidang OpenID Connect. - preferred_username (
str) — Nama pengguna dari user. Field OpenID Connect. - email_verified (
Optional[bool], opsional) — Menunjukkan apakah email pengguna telah diverifikasi. Field OpenID Connect. - email (
Optional[str], opsional) — Alamat email pengguna. Bidang OpenID Connect. - picture (
str) — URL foto profil pengguna. Field OpenID Connect. - profile (
str) — URL profil pengguna. Field OpenID Connect. - website (
Optional[str], opsional) — URL situs web pengguna. Bidang OpenID Connect. - is_pro (
bool) — Apakah pengguna adalah pengguna pro. Field Hugging Face. - can_pay (
Optional[bool], opsional) — Apakah pengguna telah mengatur metode pembayaran. Field Hugging Face. - orgs (
Optional[list[OrgInfo]], opsional) — Daftar organisasi yang diikuti oleh pengguna. Field Hugging Face.
Informasi tentang pengguna yang masuk menggunakan OAuth.
OAuthInfo
kelas huggingface_hub.OAuthInfo
< source >( access_token: straccess_token_expires_at: datetimeuser_info: OAuthUserInfostate: str | Nonescope: str )
Parameter
- access_token (
str) — Token akses. - access_token_expires_at (
datetime.datetime) — Tanggal kedaluwarsa dari token akses. - user_info (OAuthUserInfo) — Informasi pengguna.
- state (
str, opsional) — State yang diteruskan ke penyedia OAuth dalam permintaan asli ke penyedia OAuth. - scope (
str) — Scope yang diberikan.
Informasi tentang login OAuth.