Hub Python Library documentation
OAuth и FastAPI
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
Добавьте 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
Возвращает информацию о вошедшем пользователе в виде объекта OAuthInfo.
Для обеспечения гибкости и совместимости с будущими версиями этот метод очень лоялен к анализу входных данных и не вызывает ошибок.
Отсутствующие поля устанавливаются в None без предупреждения.
Возвращает None, если пользователь не вошёл в систему (нет информации в сессионной cookie).
См. attach_huggingface_oauth() для примера использования этого метода.
OAuthOrgInfo
класс 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 )
Параметры
- 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
< 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 )
Параметры
- 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
< source >( 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.