Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
"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"
"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"
"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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install PyJWT
pip install PyJWT
pip install PyJWT
0

Deja un comentario