Google Auth simple con Python

Uno de los primeros pasos que damos en la industria del desarrollo corresponde a las autenticaciones que son requeridas en millones de soluciones y a través de diferente compañías o proveedores. Es por esto que existen tecnologías que nos permiten resolver este requerimiento de forma muy simple y rápida para los lenguajes de programación más populares.

Hoy veremos el caso de Authlib con Starlette, el cual nos permite autenticarnos con una variedad de proveedores, para esto crearemos una REST API con FastAPI, este es un framework moderno y de alta performance para construir API's con Python 3.6+

Así es como se crea una aplicación FastAPI:

from fastapi import FastAPI
from starlette.middleware.sessions import SessionMiddleware

app = FastAPI()

# Esta línea es para guardar el código de acceso temporal y el estado.
app.add_middleware(SessionMiddleware, secret_key="some-random-string")

Crear Client OAuth

Una manera simple de crear un cliente OAuth de starlette(fastapi):

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'
    }
)

En este apartado necesitamos tener un archivo env donde tengamos nuestra configuraciones de variables de entorno para nuestra aplicación.

GOOGLE_CLIENT_ID=id-client
GOOGLE_CLIENT_SECRET=secret-client

Ahora se tienen que crear un cliente OAuth en Google de la siguiente manera:

Crear un proyecto en google cloud

Luego nos dirigimos a esta url: https://console.cloud.google.com/apis/credentials/consent?hl=es-419

aqui te aparecera el correo de tu cuenta google y la seleccionamos o escribes otro correo donde desees que llegue la asistencia

Lo siguiente es ir a Credenciales para crear un cliente OAuth

Dado que Authlib starlette requiere usar la instancia request, necesitamos exponer esa request a Authlib.

from starlette.requests import Request

@app.get("/login/google")
async def login_via_google(request: Request):
    redirect_uri = request.url_for('auth_via_google')
    return await oauth.google.authorize_redirect(request, redirect_uri)

@app.get("/auth/google")
async def auth_via_google(request: Request):
    token = await oauth.google.authorize_access_token(request)
    user = token['userinfo']
    return dict(user)

Y así es como con unas pocas líneas de código podemos autenticarnos con Google y con una biblioteca de proveedores de confianza como Microsoft, Discord entre otras.

pip install fastapi uvicorn authlib httpx 

Google login for FastAPI
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python…