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 он позволяет создавать защищённые 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