He seguido los documentos sobre Oauth2 pero no describe el proceso para agregar la identificación y el secreto del cliente.
https://fastapi.tiangolo.com/advanced/security/oauth2-scopes/
y que hace esto
class UserInDB(User): hashed_password: strdel ejemplo original
En la documentación, utiliza OAuth2PasswordRequestForm para autenticar al usuario. Esta clase tiene básicamente 6 campos diferentes,
grant_type: str = Form(None, regex="password"), username: str = Form(...), password: str = Form(...), scope: str = Form(""), client_id: Optional[str] = Form(None), client_secret: Optional[str] = Form(None), Entonces puede agregar client_id y client_secret , si está interesado en el Repositorio aquí.
Pero normalmente prefiero authlib , ahorra mucho tiempo y lo hace más fácil. Aquí hay un ejemplo completo de cómo puede crear un OAuth con authlib
Primero cree un cliente OAuth
from authlib.integrations.starlette_client import OAuth from starlette.config import Config config = Config('.env') # read config from .env file oauth = OAuth(config) oauth.register( name='google', server_metadata_url='https://accounts.google.com/.well-known/openid-configuration', client_kwargs={ 'scope': 'openid email profile' } ) No necesitamos agregar client_id y client_secret aquí, porque están en el archivo .env. Se supone que no debe codificarlos en el código de los productos reales. Google tiene un punto final de descubrimiento de OpenID, podemos usar esta URL para server_metadata_url . Authlib buscará automáticamente este server_metadata_url para configurar el cliente de OAuth por usted.
Ahora crearemos una aplicación FastAPI para definir una ruta de inicio de sesión.
from fastapi import FastAPI, Request from starlette.middleware.sessions import SessionMiddleware app = FastAPI() app.add_middleware(SessionMiddleware, secret_key="secret-string") Necesitamos este SessionMiddleware, porque Authlib usará request.session para almacenar códigos y estados temporales. El siguiente código, que es /login de sesión, lo redirigirá al sitio web de la cuenta de Google.
@app.route('/login') async def login(request: Request): redirect_uri = request.url_for('auth') return await oauth.google.authorize_redirect(request, redirect_uri Cuando otorga acceso desde el sitio web de Google, Google lo redirigirá a su redirect_uri dado, que es request.url_for('auth') :
@app.route('/auth') async def auth(request: Request): token = await oauth.google.authorize_access_token(request) user = await oauth.google.parse_id_token(request, token) return userEl código anterior obtendrá un token que contiene access_token e id_token. Un id_token contiene información del usuario, solo necesitamos analizarlo para obtener la información del usuario de inicio de sesión.
Fuentes: Authlib-FastAPI-Google-Iniciar sesión
Además, si aún desea usar Pure FastAPI, consulte este enlace FastAPI OAuth2PasswordRequestForm