Hub Python Library documentation

OAuth와 FastAPI

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

OAuth와 FastAPI

OAuth는 액세스 위임을 위한 개방형 표준으로, 사용자의 자격 증명을 노출하지 않고 애플리케이션에 사용자의 정보에 대한 제한된 액세스를 부여하는 데 일반적으로 사용됩니다. FastAPI와 결합하면 Google이나 GitHub와 같은 외부 ID 제공자를 사용하여 로그인할 수 있는 안전한 API를 구축할 수 있습니다. 일반적인 시나리오에서는:

  • FastAPI는 API 엔드포인트를 정의하고 HTTP 요청을 처리합니다.
  • OAuth는 fastapi.security와 같은 라이브러리 또는 Authlib와 같은 외부 도구를 사용하여 통합됩니다.
  • 사용자가 로그인하려고 하면 FastAPI가 사용자를 OAuth 제공자의 로그인 페이지로 리디렉션합니다.
  • 로그인이 성공하면 제공자는 토큰과 함께 다시 리디렉션합니다.
  • FastAPI는 이 토큰을 검증하여 사용자를 인증하거나 사용자 프로필 데이터를 가져옵니다.

이 접근 방식은 비밀번호를 직접 처리하는 것을 피하고, 신원 관리를 신뢰할 수 있는 제공업체에 위임하는 데 도움이 됩니다.

FastAPI에서 Hugging Face OAuth 통합

이 모듈은 FastAPI 애플리케이션에 Hugging Face OAuth를 통합하는 도구를 제공합니다. 로컬 개발을 위한 목(mock) 동작과 Spaces를 위한 실제 OAuth 플로우를 포함하여 Hugging Face 플랫폼을 사용한 사용자 인증을 지원합니다.

OAuth 개요

attach_huggingface_oauth 함수는 FastAPI 앱에 로그인, 로그아웃, 콜백 엔드포인트를 추가합니다. Space에서 사용할 경우 Hugging Face OAuth 시스템에 연결됩니다. 로컬에서 사용할 경우 모킹된 사용자가 주입됩니다. Space에 HF 로그인 옵션을 추가하는 방법에 대해 자세히 알아보려면 여기를 클릭하세요.

사용 방법은 무엇인가요?

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

OAuth가 실제로 동작하는 실용적인 예제에도 관심이 있을 수 있습니다. 더 포괄적인 구현을 확인하려면, HF OAuth를 대규모 애플리케이션에 구현한 medoidai/GiveBackGPT Space를 살펴보세요.

attach_huggingface_oauth

huggingface_hub.attach_huggingface_oauth

< >

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

FastAPI 앱에 OAuth 엔드포인트를 추가하여 Hugging Face를 통한 OAuth 로그인을 활성화합니다.

사용 방법:

  • FastAPI 앱에서 이 메서드를 호출하여 OAuth 엔드포인트를 추가합니다.
  • 루트 핸들러에서 parse_huggingface_oauth(request)를 호출하여 OAuth 정보를 가져옵니다.
  • 사용자가 로그인된 경우, 사용자 정보가 포함된 OAuthInfo 객체가 반환됩니다. 로그인되지 않은 경우 None이 반환됩니다.
  • 애플리케이션에서 사용자가 로그인 및 로그아웃할 수 있도록 /oauth/huggingface/login과 /oauth/huggingface/logout 링크를 추가하세요.

예:

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 )

로그인된 사용자의 정보를 OAuthInfo 객체로 반환합니다.

유연성과 향후 확장성을 위해 이 메서드는 파싱을 매우 느슨하게 처리하며 오류를 발생시키지 않습니다. 누락된 필드는 경고 없이 None으로 설정됩니다.

사용자가 로그인되어 있지 않은 경우(세션 쿠키에 정보가 없는 경우) None을 반환합니다.

이 메서드를 사용하는 예제는 attach_huggingface_oauth()를 참고하세요.

OAuthOrgInfo

클래스 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 )

매개변수

  • sub (str) — 조직의 고유 식별자. OpenID Connect 필드.
  • name (str) — 조직의 전체 이름입니다. OpenID Connect 필드입니다.
  • preferred_username (str) — 조직의 사용자 이름입니다. OpenID Connect 필드입니다.
  • picture (str) — 조직의 프로필 사진 URL입니다. OpenID Connect 필드입니다.
  • plan (str, 선택 사항) — 조직의 플랜(예: “enterprise”, “team”). Hugging Face 필드.
  • can_pay (Optional[bool], 선택) — 조직에 결제 수단이 설정되어 있는지 여부입니다. Hugging Face 필드입니다.
  • role_in_org (Optional[str], 선택 사항) — 조직 내 사용자의 역할입니다. Hugging Face 필드입니다.
  • security_restrictions (Optional[list[Literal["ip", "token-policy", "mfa", "sso"]]], 선택) — 해당 조직에서 사용자가 완료하지 않은 보안 제한 항목의 배열입니다. 가능한 값: “ip”, “token-policy”, “mfa”, “sso”. Hugging Face 필드입니다.

OAuth로 로그인한 사용자와 연결된 조직에 대한 정보입니다.

OAuthUserInfo

클래스 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 )

매개변수

  • sub (str) — 사용자의 고유 식별자. 이름이 변경된 경우에도 동일하게 유지됩니다. OpenID Connect 필드입니다.
  • name (str) — 사용자의 전체 이름입니다. OpenID Connect 필드입니다.
  • preferred_username (str) — 사용자의 사용자 이름입니다. OpenID Connect 필드입니다.
  • email_verified (Optional[bool], 선택) — 사용자의 이메일이 인증되었는지 여부를 나타냅니다. OpenID Connect 필드입니다.
  • email (Optional[str], 선택) — 사용자의 이메일 주소입니다. OpenID Connect 필드입니다.
  • picture (str) — 사용자의 프로필 사진 URL입니다. OpenID Connect 필드입니다.
  • profile (str) — 사용자의 프로필 URL입니다. OpenID Connect 필드입니다.
  • website (Optional[str], 선택) — 사용자의 웹사이트 URL입니다. OpenID Connect 필드입니다.
  • is_pro (bool) — 사용자가 프로 사용자인지 여부. Hugging Face 필드.
  • can_pay (Optional[bool], 선택) — 사용자가 결제 수단을 설정했는지 여부입니다. Hugging Face 필드입니다.
  • orgs (Optional[list[OrgInfo]], 선택) — 사용자가 소속된 조직 목록입니다. Hugging Face 필드입니다.

OAuth로 로그인한 사용자의 정보입니다.

OAuthInfo

클래스 huggingface_hub.OAuthInfo

< >

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

매개변수

  • access_token (str) — 액세스 토큰입니다.
  • access_token_expires_at (datetime.datetime) — 액세스 토큰의 만료 날짜입니다.
  • user_info (OAuthUserInfo) — 사용자 정보입니다.
  • state (str, 선택 사항) — OAuth 제공자에게 원래 요청을 보낼 때 전달된 상태입니다.
  • scope (str) — 부여된 범위.

OAuth 로그인에 대한 정보.

Update on GitHub