No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Spotify: Authorization Code Flow

14/25
Recursos

驴C贸mo implementar Authorization Code Flow en Spotify?

La implementaci贸n del Authorization Code Flow con Spotify es fundamental para permitir que aplicaciones web accedan de manera segura a los recursos de un usuario. Este flujo de autorizaci贸n es ampliamente utilizado debido a su seguridad y versatilidad en diferentes servicios. Vamos a explorar los pasos necesarios para configurar y utilizar este flujo en Spotify.

驴C贸mo creamos y configuramos una aplicaci贸n en Spotify?

El primer paso para implementar este flujo es crear y configurar una aplicaci贸n en el dashboard de desarrolladores de Spotify. Aqu铆 est谩n los pasos b谩sicos para lograrlo:

  1. Autenticarse: Inicia sesi贸n con tu cuenta de Spotify para acceder al dashboard.
  2. Crear una aplicaci贸n: Dentro del dashboard, crea una nueva "App", que Spotify denomina aplicaciones de manera amigable.
  3. Registrar cliente: Asigna un nombre y una descripci贸n a tu aplicaci贸n, acepta los t茅rminos y presiona "crear".
  4. Obtener credenciales: Copia tu Client ID y Client Secret, esenciales para autenticar tu aplicaci贸n. No los compartas p煤blicamente.

驴C贸mo configurar y manejar un proyecto que utiliza Next.js y React?

El proyecto se beneficia significativamente del uso de Next.js, un marco React que permite gestionar APIs del lado del servidor:

  1. Configurar el entorno: Instala y configura un proyecto React con Next.js.
  2. Variables de entorno: Guarda tu Client ID, Client Secret y la URL de redirecci贸n en tus variables de entorno.
  3. Crear un bot贸n de conexi贸n: En el archivo index.js, agrega un bot贸n que redirija a la API de inicio de sesi贸n (api/login).

驴C贸mo realizar un Request Authorization?

Para solicitar autorizaci贸n al servidor, deben configurarse ciertos par谩metros:

  1. Scopes necesarios: Define los scopes necesarios para el acceso a los endpoints espec铆ficos de Spotify:
    • read_private
    • read_email
    • playlist_read_private
  2. Par谩metros del query: El query debe incluir:
    • response_type como code
    • client ID
    • Scopes separados por espacios
    • redirect_uri de la aplicaci贸n
  3. Construcci贸n del query string: Usa query-string para transformar estos par谩metros en un query string formateado correctamente.
const queryString = require('query-string');

let query = {
  response_type: 'code',
  client_id: process.env.SPOTIFY_CLIENT_ID,
  scope: scopes.join(' '),
  redirect_uri: process.env.REDIRECT_URI
};

const authURL = `https://accounts.spotify.com/authorize?${queryString.stringify(query)}`;

驴C贸mo intercambiar un c贸digo por un token de acceso?

Una vez que se obtiene el c贸digo de autorizaci贸n del servidor, el siguiente paso es obtener un token de acceso a trav茅s del backend, necesario para consumir la API de Spotify:

  1. Realizar el fetch: Usa fetch para enviar un POST request a la URL del token de Spotify.
  2. Headers necesarios: Define Content-Type y Authorization usando Basic Auth con Client ID y Client Secret.
  3. Par谩metros del cuerpo: Env铆a el code, redirect_uri, y tipo de grant authorization_code en el cuerpo de la solicitud.
const response = await fetch('https://accounts.spotify.com/api/token', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': `Basic ${Buffer.from(`${process.env.SPOTIFY_CLIENT_ID}:${process.env.SPOTIFY_CLIENT_SECRET}`).toString('base64')}`
  },
  body: queryString.stringify({
    code: codeFromRequest,
    redirect_uri: process.env.REDIRECT_URI,
    grant_type: 'authorization_code'
  })
});

驴C贸mo manejar y almacenar el token de acceso?

Finalmente, para interactuar con la API de Spotify, el token de acceso debe almacenarse de forma segura y transmitirse al cliente de manera efectiva, utilizando cookies HTTP-only para mayor seguridad:

  1. Creaci贸n de la cookie: Guarda el access_token dentro de una cookie HTTP-only.
  2. Consumo del token: Usa el token en la aplicaci贸n cliente para acceder a recursos protegidos, como el perfil del usuario o las listas de reproducci贸n.

Explorar estos pasos y asegurarse de comprender cada parte del flujo de OAuth puede parecer desafiante al principio, pero con la pr谩ctica, se convierte en un proceso m谩s sencillo. 隆An铆mate a probar este flujo con otros servicios y seguir ampliando tus habilidades de integraci贸n OAuth!

Aportes 10

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Esta es una de las partes que mas llena este curso, ver los ejemplos practicos de cada uno de los flujos y verlos aplicados en aplicaciones reales y grandes.

De verdad, emociona poder entender todas las terminologias y diagramas jaja

Realic茅 la implementaci贸n con Google Oauth 2. las credentials se generan desde el GCP console credentials: [`https://console.cloud.google.com/apis/credentials`](https://console.cloud.google.com/apis/credentials) Ac谩 se encuentran los scopes que como aprendimos dependen del servicio que quieras consumir, google tiene muchos servicio, pero en general spreadsheets (excel de google), drive, gmail son algunos de los mas comunes para usar: [`https://developers.google.com/identity/protocols/oauth2/scopes`](https://developers.google.com/identity/protocols/oauth2/scopes) La url de autenticaci贸n es: [`https://accounts.google.com/o/oauth2/v2/auth`](https://accounts.google.com/o/oauth2/v2/auth) Y la del token: [`https://oauth2.googleapis.com/token`](https://oauth2.googleapis.com/token)
Es muy interesante ver como consumir un servidor de autenticaci贸n PERO tambi茅n me interesa ver como crear nuestro propio servidor de autenticaci贸n bajo el protocolo OAuth2.0 y que tener en cuenta para ello, espero un curso de esto!
en el caso de que sea un SPA como ser铆a? ac谩 el ejemplo lo hacen con nextjs teniendo en cuenta el SSR, pero seg煤n mi pregunta, cuando se hace mediante un SPA cual ser铆a el mejor m茅todo??
Bien, ahora tengo una duda existencial, ya con esa cookie que nos estamos enviando en cada peticion desde el frontend a todos lados en HOME, podemos mandarla tambien a nuestros propios endpoint sacarla y validarla contra un endpoint de Spotify por expiracion o algo?
A mi personalmente no me gusta la forma en la que explican el curso, aunque el profe si tiene razon, ven yo te lo explico como tu tio el que no sabe nada, pero opina: El flujo es el siguiente: tu tienes tu app puede ser movil;desktop;web;iot etc... Desde ahi digamos que te da flojera usar un email y contrase帽a, entonces quieres usar los datos en este caso de tu spotify que ya tienes logueado previamente en tu pc... O bueno, te gusta mas esa app para loguearte porque siempre te sabes la contrase帽a (maybe). Bien, ahora viene lo chido, porque en tu app, cuando le das conectar con Spotify, lo que esta haciendo tu app es IR a un endpoint de espotify y decirle, buenas bro, tengo esta persona, en mi app que existe en tu db y quiere meterse en mi pagina, el se va a loguear y TU dame esos datos con un verificador y un id (cosas no privadas) entonces la persona acepta o declina lo que quiere, y spotify toma esa data la devuelve y cuando el frontend recibe el OK ahora llama a spotify con un callback ahora si a nuestro server, con esos datos NOSOTROS en back autenticamos y ahora si le devolvemos los datos que quiere al cliente. No estan asi asi pero es para que tengas una idea, antes de todo esto, previamente, nuestro servidor debe tener el uso de una cuenta en spotify para poder enlazar una app web con ellos. Ya lo demas es parafraseos. OJO el profe usa SSRendering con Nextjs por eso es que ves que ?que tiene que ver el back con el front? Es por eso... pero tu peudes hacerlo con cualquier cliente front. No te frustres, repite una y otra vez, ademas explora y equivocate! GO AHEAD. 馃挌
![](https://supabase.mermaidchart.com/storage/v1/object/public/chatgpt-diagrams/2024-07-09/9b9c19a3-6619-49e2-aefc-b3bbc3473655.png)
* A los que tienen este error en la practica ![](https://static.platzi.com/media/user_upload/image-1e280822-1f7e-4f4a-ade1-8f4b9cdc815e.jpg) se soluciona as铆: ![](https://static.platzi.com/media/user_upload/code-b00f3d4e-457c-4c2d-8285-221537bb6e6c.jpg) porque: dentro del objeto de la cookie el token viene con clave "accesToken" * y a los que no ten铆an cuenta de Spotify y apenas la crearon para la practica les recomiendo colocar una imagen de su perfil y una breve descripci贸n o si no agreguen un encadenamiento opcional dentro del Archivo Card.js ![](https://static.platzi.com/media/user_upload/code-35161354-1ac7-4950-ae9f-9e9a95051f03.jpg)
El authorization gran hay que almacenarlo o una vez que se pide el token, el authorization gran ya deja de ser valido? Por otro lado, en caso de que sea asi, si el token de acceso y refresco vencen, se hace todo el flujo nuevamente? Entiedo que mientras se tengan los tokens sin vencer, se puede seguir teniendo acceso sin la interversion del user (resource owner)

隆 Genial clase !