Hub Python Library documentation

OAuth и FastAPI

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v2.4.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

OAuth и FastAPI

OAuth — это открытый стандарт делегирования доступа, который обычно используется для предоставления приложениям ограниченного доступа к информации пользователя без раскрытия его учётных данных. В сочетании с FastAPI он позволяет создавать защищённые API, в которых пользователи могут входить с помощью внешних провайдеров идентификации, таких как Google или GitHub. В типичном сценарии:

  • FastAPI определяет конечные точки API и обрабатывает HTTP-запросы.
  • OAuth интегрируется с использованием библиотек, таких как fastapi.security, или внешних инструментов, таких как Authlib.
  • Когда пользователь хочет войти в систему, FastAPI перенаправляет его на страницу входа провайдера OAuth.
  • После успешного входа провайдер перенаправляет обратно с токеном.
  • FastAPI проверяет этот токен и использует его для авторизации пользователя или получения данных профиля пользователя.

Этот подход помогает избежать прямого управления паролями и перекладывает управление идентификацией на доверенных провайдеров.

Интеграция OAuth Hugging Face в FastAPI

Этот модуль предоставляет инструменты для интеграции Hugging Face OAuth в приложение FastAPI. Он позволяет аутентифицировать пользователей с использованием платформы Hugging Face, включая имитацию поведения для локальной разработки и реальный OAuth-поток для Spaces.

Обзор OAuth

Функция attach_huggingface_oauth добавляет в ваше приложение FastAPI эндпоинты для входа, выхода и обратного вызова. При использовании в Space она подключается к системе OAuth Hugging Face. При локальном использовании она подставляет тестового пользователя. Нажмите здесь, чтобы узнать больше о добавлении опции Sign-In with HF в ваш Space

Как им пользоваться?

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. Для более комплексной реализации посмотрите Space medoidai/GiveBackGPT, в котором HF OAuth реализован в полномасштабном приложении.

attach_huggingface_oauth

huggingface_hub.attach_huggingface_oauth

< >

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

Добавьте OAuth-эндпоинты в приложение FastAPI, чтобы обеспечить вход через OAuth с Hugging Face.

Как использовать:

  • Вызовите этот метод в вашем приложении 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, если пользователь не вошёл в систему (нет информации в сессионной cookie).

См. 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) — Является ли пользователь pro-пользователем. Поле 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 в исходном запросе к поставщику OAuth.
  • scope (str) — Предоставленная область действия.

Информация о входе через OAuth.

Update on GitHub