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