Hub Python Library documentation

OAuth y FastAPI

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

OAuth y FastAPI

OAuth es un estándar abierto para la delegación de acceso, utilizado comúnmente para otorgar a las aplicaciones un acceso limitado a la información de un usuario sin exponer sus credenciales. Combinado con FastAPI, permite construir APIs seguras que permiten a los usuarios iniciar sesión mediante proveedores de identidad externos como Google o GitHub. En un escenario habitual:

  • FastAPI definirá los puntos finales de la API y gestionará las solicitudes HTTP.
  • OAuth se integra mediante bibliotecas como fastapi.security o herramientas externas como Authlib.
  • Cuando un usuario desea iniciar sesión, FastAPI lo redirige a la página de inicio de sesión del proveedor de OAuth.
  • Tras iniciar sesión correctamente, el proveedor redirige de vuelta con un token.
  • FastAPI verifica este token y lo utiliza para autorizar al usuario o para obtener los datos de su perfil.

Este enfoque ayuda a evitar el manejo directo de contraseñas y delega la gestión de identidades en proveedores de confianza.

Integración de OAuth de Hugging Face en FastAPI

Este módulo proporciona herramientas para integrar Hugging Face OAuth en una aplicación de FastAPI. Permite la autenticación de usuarios mediante la plataforma de Hugging Face, incluyendo un comportamiento simulado para el desarrollo local y el flujo OAuth real para Spaces.

Resumen de OAuth

La función attach_huggingface_oauth añade puntos finales de inicio de sesión, cierre de sesión y callback a tu aplicación FastAPI. Cuando se usa en un Space, se conecta al sistema de OAuth de Hugging Face. Cuando se usa localmente, inyectará un usuario simulado. Haz clic aquí para saber más sobre cómo añadir la opción de iniciar sesión con HF a tu Space

¿Cómo se usa?

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

También podría interesarle un ejemplo práctico que demuestra OAuth en acción. Para una implementación más completa, consulte el Space medoidai/GiveBackGPT, que implementa HF OAuth en una aplicación a gran escala.

attach_huggingface_oauth

huggingface_hub.attach_huggingface_oauth

< >

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

Agrega puntos finales de OAuth a una aplicación de FastAPI para habilitar el inicio de sesión con OAuth en Hugging Face.

Cómo usar:

  • Llama a este método en tu aplicación de FastAPI para agregar los puntos de acceso de OAuth.
  • Dentro de los manejadores de ruta, llama a parse_huggingface_oauth(request) para obtener la información de OAuth.
  • Si el usuario está conectado, se devuelve un objeto OAuthInfo con la información del usuario. Si no, se devuelve None.
  • En tu aplicación, asegúrate de añadir enlaces a /oauth/huggingface/login y /oauth/huggingface/logout para que el usuario pueda iniciar y cerrar sesión.

Ejemplo:

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 )

Devuelve la información de un usuario conectado como un objeto OAuthInfo.

Para garantizar flexibilidad y compatibilidad futura, este método es muy permisivo en su análisis y no genera errores. Los campos que faltan se establecen en None sin ninguna advertencia.

Devuelve None si el usuario no ha iniciado sesión (no hay información en la cookie de sesión).

Vea attach_huggingface_oauth() para un ejemplo de cómo usar este método.

OAuthOrgInfo

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

Parámetros

  • sub (str) — Identificador único de la organización. Campo de OpenID Connect.
  • name (str) — El nombre completo de la organización. Campo de OpenID Connect.
  • preferred_username (str) — Nombre de usuario de la organización. Campo de OpenID Connect.
  • picture (str) — URL de la imagen de perfil de la organización. Campo de OpenID Connect.
  • plan (str, opcional) — El plan de la organización (p. ej., “enterprise”, “team”). Campo de Hugging Face.
  • can_pay (Optional[bool], opcional) — Indica si la organización tiene un método de pago configurado. Campo de Hugging Face.
  • role_in_org (Optional[str], opcional) — El rol del usuario en la organización. Campo de Hugging Face.
  • security_restrictions (Optional[list[Literal["ip", "token-policy", "mfa", "sso"]]], opcional) — Matriz de restricciones de seguridad que el usuario no ha completado para esta organización. Valores posibles: “ip”, “token-policy”, “mfa”, “sso”. Campo de Hugging Face.

Información sobre una organización vinculada a un usuario conectado con OAuth.

OAuthUserInfo

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

Parámetros

  • sub (str) — Identificador único del usuario, incluso en caso de cambio de nombre. Campo de OpenID Connect.
  • name (str) — El nombre completo del usuario. Campo de OpenID Connect.
  • preferred_username (str) — El nombre de usuario del usuario. Campo de OpenID Connect.
  • email_verified (Optional[bool], opcional) — Indica si el correo electrónico del usuario está verificado. Campo de OpenID Connect.
  • email (Optional[str], opcional) — La dirección de correo electrónico del usuario. Campo de OpenID Connect.
  • picture (str) — URL de la foto de perfil del usuario. Campo de OpenID Connect.
  • profile (str) — La URL del perfil del usuario. Campo de OpenID Connect.
  • website (Optional[str], opcional) — La URL del sitio web del usuario. Campo de OpenID Connect.
  • is_pro (bool) — Indica si el usuario es un usuario pro. Campo de Hugging Face.
  • can_pay (Optional[bool], opcional) — Indica si el usuario tiene un método de pago configurado. Campo de Hugging Face.
  • orgs (Optional[list[OrgInfo]], opcional) — Lista de organizaciones de las que el usuario es miembro. Campo de Hugging Face.

Información sobre un usuario conectado con OAuth.

OAuthInfo

clase huggingface_hub.OAuthInfo

< >

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

Parámetros

  • access_token (str) — El token de acceso.
  • access_token_expires_at (datetime.datetime) — La fecha de expiración del token de acceso.
  • user_info (OAuthUserInfo) — La información del usuario.
  • state (str, opcional) — Estado que se pasó al proveedor de OAuth en la solicitud original al proveedor de OAuth.
  • scope (str) — Alcance concedido.

Información sobre el inicio de sesión con OAuth.

Update on GitHub