Hoy vamos a aprender cómo podemos validar un Token de inicio de sesión en LinkedIn Sign usando Open ID Connect en Python.
Lo que haremos es crear un fichero utils que nos permitirá validar el token obtenido de un cliente.
linkedin.py
import requests from datetime import datetime, timedelta import jwt CLIENT_SECRET_LINKEDIN = "SECRET_APP_ID" def obtener_datos_usuario_linkedin(client_id, client_secret, redirect_uri, authorization_code): # Paso 1: Intercambiar el código de autorización por un token de acceso url_token = "https://www.linkedin.com/oauth/v2/accessToken" headers = {"Content-Type": "application/x-www-form-urlencoded"} data = {"grant_type": "authorization_code", "code": authorization_code, "redirect_uri": redirect_uri, "client_id": client_id, "client_secret": client_secret} response = requests.post(url_token, headers=headers, data=data) if response.status_code != 200: return f"Error al obtener el token de acceso: {response.json()}" #Este ID token contiene el USUARIO con sus campos: name, given_name, family_name, picture, email, email_verified, locale id_token = response.json().get("id_token") # Decodifica el token # En este caso el token es un JWT (JSON Web Token) objeto_usuario = decodificarTokenJWT(id_token) return objeto_usuario # Obtener datos de usuario () def decodificarTokenJWT(token): decoded = jwt.decode(token, options={"verify_signature": False}) return decoded
El proceso es sencillo, primero tenemos que indicar la clave de app privada en la variable CLIENT_SECRET_LINKEDIN (Aquí te explico cómo obtener una).
Después tendremos que recibir de un cliente web o APP el token , client_id y redirect_uri que queremos validar para obtener los datos de usuario (aquí te explico cómo crear un cliente para web usado React).
Una vez tenemos todos los datos esta función se encargará de validar el token y obtener id_token.
El campo id_token es un JSON JWT que podemos decodificar y tiene esta estructura:
"iss": "https://www.linkedin.com/oauth", "aud": "42134312asd", "iat": 123453124, "exp": 412342135412, "sub": "vfdasrewra", "name": "Nombre con apellidos", "given_name": "Nombre", "family_name": "Apellido Apellido2", "picture": "https://media.licdn.com/dms/image/v2/fasdfads", "email": "emailusuario", "email_verified": "true", "locale": "es_ES"
Nota: para que funcione el decodificador de tokens hay que instalar la librería JWT.
pip install PyJWT
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.