Hub Python Library documentation

OAuth và FastAPI

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

OAuth và FastAPI

OAuth là một tiêu chuẩn mở cho việc ủy quyền truy cập, thường được sử dụng để cấp cho các ứng dụng quyền truy cập hạn chế vào thông tin của người dùng mà không cần tiết lộ thông tin xác thực của họ. Khi kết hợp với FastAPI, nó cho phép bạn xây dựng các API an toàn, cho phép người dùng đăng nhập bằng các nhà cung cấp danh tính bên ngoài như Google hoặc GitHub. Trong một kịch bản thông thường:

  • FastAPI sẽ định nghĩa các điểm cuối API và xử lý các yêu cầu HTTP.
  • OAuth được tích hợp bằng cách sử dụng các thư viện như fastapi.security hoặc các công cụ bên ngoài như Authlib.
  • Khi người dùng muốn đăng nhập, FastAPI sẽ chuyển hướng họ đến trang đăng nhập của nhà cung cấp OAuth.
  • Sau khi đăng nhập thành công, nhà cung cấp sẽ chuyển hướng trở lại kèm theo một token.
  • FastAPI xác minh token này và sử dụng nó để cấp quyền cho người dùng hoặc lấy dữ liệu hồ sơ người dùng.

Cách tiếp cận này giúp tránh việc xử lý mật khẩu trực tiếp và chuyển giao việc quản lý danh tính cho các nhà cung cấp đáng tin cậy.

Tích hợp Hugging Face OAuth trong FastAPI

Module này cung cấp các công cụ để tích hợp Hugging Face OAuth vào ứng dụng FastAPI. Nó cho phép xác thực người dùng bằng nền tảng Hugging Face, bao gồm hành vi giả lập cho phát triển cục bộ và luồng OAuth thực cho Spaces.

Tổng quan về OAuth

Hàm attach_huggingface_oauth thêm các endpoint đăng nhập, đăng xuất và callback vào ứng dụng FastAPI của bạn. Khi được sử dụng trong một Space, nó kết nối với hệ thống OAuth của Hugging Face. Khi được sử dụng cục bộ, nó sẽ chèn một người dùng giả lập. Nhấp vào đây để tìm hiểu thêm về cách thêm tùy chọn Sign-In with HF vào Space của bạn

Cách sử dụng?

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}!"}

Bạn cũng có thể quan tâm đến một ví dụ thực tế minh họa OAuth trong thực hành. Để có một triển khai toàn diện hơn, hãy xem Space medoidai/GiveBackGPT ứng dụng HF OAuth trong một ứng dụng quy mô đầy đủ.

attach_huggingface_oauth

huggingface_hub.attach_huggingface_oauth

< >

( app: fastapi.FastAPIroute_prefix: str = '/' )

Thêm các điểm cuối OAuth vào ứng dụng FastAPI để cho phép đăng nhập OAuth với Hugging Face.

Cách sử dụng:

  • Gọi phương thức này trên ứng dụng FastAPI của bạn để thêm các điểm cuối OAuth.
  • Bên trong các route handler của bạn, hãy gọi parse_huggingface_oauth(request) để lấy thông tin OAuth.
  • Nếu người dùng đã đăng nhập, một đối tượng OAuthInfo chứa thông tin của người dùng sẽ được trả về. Nếu không, None sẽ được trả về.
  • Trong ứng dụng của bạn, hãy đảm bảo thêm các liên kết đến /oauth/huggingface/login và /oauth/huggingface/logout để người dùng đăng nhập và đăng xuất.

Ví dụ:

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

huggingface_hub.parse_huggingface_oauth

< >

( request: fastapi.Request )

Trả về thông tin từ người dùng đã đăng nhập dưới dạng đối tượng OAuthInfo.

Để đảm bảo tính linh hoạt và khả năng tương thích trong tương lai, phương pháp này rất thoáng trong việc phân tích và không gây ra lỗi. Các trường bị thiếu sẽ được đặt thành None mà không có cảnh báo.

Trả về None nếu người dùng chưa đăng nhập (không có thông tin trong session cookie).

Xem attach_huggingface_oauth() để có ví dụ về cách sử dụng phương pháp này.

OAuthOrgInfo

lớp huggingface_hub.OAuthOrgInfo

< >

( 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 )

Tham số

  • sub (str) — Định danh duy nhất cho tổ chức. Trường OpenID Connect.
  • name (str) — Tên đầy đủ của tổ chức. Trường OpenID Connect.
  • preferred_username (str) — Tên người dùng của tổ chức. Trường OpenID Connect.
  • picture (str) — URL ảnh đại diện của tổ chức. Trường OpenID Connect.
  • plan (str, không bắt buộc) — Gói của tổ chức (ví dụ: “enterprise”, “team”). Trường của Hugging Face.
  • can_pay (Optional[bool], tùy chọn) — Cho biết tổ chức đã thiết lập phương thức thanh toán hay chưa. Trường của Hugging Face.
  • role_in_org (Optional[str], tùy chọn) — Vai trò của người dùng trong tổ chức. Trường của Hugging Face.
  • security_restrictions (Optional[list[Literal["ip", "token-policy", "mfa", "sso"]]], tùy chọn) — Mảng các hạn chế bảo mật mà người dùng chưa hoàn thành cho tổ chức này. Các giá trị có thể: “ip”, “token-policy”, “mfa”, “sso”. Trường của Hugging Face.

Thông tin về một tổ chức được liên kết với người dùng đã đăng nhập bằng OAuth.

OAuthUserInfo

lớp huggingface_hub.OAuthUserInfo

< >

( 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 )

Tham số

  • sub (str) — Định danh duy nhất của người dùng, kể cả trong trường hợp đổi tên. Trường OpenID Connect.
  • name (str) — Họ và tên đầy đủ của người dùng. Trường OpenID Connect.
  • preferred_username (str) — Tên người dùng của người dùng. Trường OpenID Connect.
  • email_verified (Optional[bool], tùy chọn) — Chỉ ra xem email của người dùng đã được xác minh hay chưa. Trường OpenID Connect.
  • email (Optional[str], tùy chọn) — Địa chỉ email của người dùng. Trường OpenID Connect.
  • picture (str) — URL ảnh hồ sơ của người dùng. Trường OpenID Connect.
  • profile (str) — URL hồ sơ của người dùng. Trường OpenID Connect.
  • website (Optional[str], tùy chọn) — URL trang web của người dùng. Trường OpenID Connect.
  • is_pro (bool) — Liệu người dùng có phải là người dùng pro hay không. Trường của Hugging Face.
  • can_pay (Optional[bool], tùy chọn) — Liệu người dùng đã thiết lập phương thức thanh toán hay chưa. Trường của Hugging Face.
  • orgs (Optional[list[OrgInfo]], không bắt buộc) — Danh sách các tổ chức mà người dùng là thành viên. Trường của Hugging Face.

Thông tin về người dùng đã đăng nhập bằng OAuth.

OAuthInfo

lớp huggingface_hub.OAuthInfo

< >

( access_token: straccess_token_expires_at: datetimeuser_info: OAuthUserInfostate: str | Nonescope: str )

Tham số

  • access_token (str) — Token truy cập.
  • access_token_expires_at (datetime.datetime) — Ngày hết hạn của access token.
  • user_info (OAuthUserInfo) — Thông tin người dùng.
  • state (str, tùy chọn) — Trạng thái được truyền cho nhà cung cấp OAuth trong yêu cầu ban đầu đến nhà cung cấp OAuth.
  • scope (str) — Phạm vi được cấp.

Thông tin về đăng nhập OAuth.

Update on GitHub