Validar token Auth 2.0 de LinkedIn sign usando (inicio de sesión) Open ID Connect en Python

Tiempo de lectura: 2 minutos

Hoy vamos a aprender cómo podemos validar un Token de inicio de sesión en LinkedIn Sign usando Open ID Connect en Python.

Móvil con Imagen de Linkedin - Pexels

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

Deja un comentario