Implementé el inicio de sesión a través de Google OAuth2 en mi sitio web. Envío un código de autorización a Google y, a cambio, obtengo el token de identificación y el token de actualización (no me importa el token de acceso porque no quiero acceder a las API de Google. Solo necesito autenticar al usuario y obtener información básica como nombre y dirección de correo electrónico):
async function getTokens(authorizationCode) { try { const response = await fetch( `https://oauth2.googleapis.com/token`, { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }, body: new URLSearchParams({ code: authorizationCode, client_id: process.env.REACT_APP_GOOGLE_CLIENT_ID, client_secret: process.env.REACT_APP_GOOGLE_CLIENT_SECRET, redirect_uri: "http://localhost:3000", grant_type: "authorization_code" }) } ) return response.json() } catch (error) { console.log(error); } }Para no requerir que el usuario inicie sesión dos veces, la extensión de Chrome que la acompaña utiliza la página de inicio de sesión de la aplicación web para su propia autenticación. Para esto, la aplicación web envía los tokens (y el tiempo de vencimiento) a través de un mensaje a la extensión:
function sendSavedTokensToExtension() { const idToken = localStorage.getItem(Constants.KEY_ID_TOKEN) const refreshToken = localStorage.getItem(Constants.KEY_REFRESH_TOKEN) const expiresAt = localStorage.getItem(Constants.KEY_ID_TOKEN_EXPIRES_AT) chrome.runtime.sendMessage(Constants.EXTENSION_ID, { tokens: { id_token: idToken, refresh_token: refreshToken, expires_at: expiresAt } } ) }Tanto la aplicación web como la extensión tienen su propia lógica de actualización que actualiza el token de identificación cuando se alcanza el tiempo de vencimiento. Ambos comparten el mismo token de identificación y token de actualización . Para esto, ambos también deben usar la misma identificación de cliente (la extensión usa la identificación de cliente de la aplicación web). Parece funcionar y tanto la aplicación web como la extensión parecen poder actualizar su sesión de forma independiente. ¿Hay algo de malo en compartir el código de actualización de esta manera?