es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Se puede utilizar un token de ID de OpenID Connect para autenticar en una API?

Estoy construyendo una aplicación MERN.

La parte posterior está construida usando Express y expone una API con la que los usuarios pueden crear datos y acceder a los datos que han creado.

Quiero permitir a los usuarios iniciar sesión con Google y obtener la autorización para crear y acceder a los recursos en esta API que controlo (no en las API de Google).

Sigo encontrando artículos sobre OAuth 2/OpenID Connect que indican que un token de ID es para uso de un cliente y que se debe usar un token de acceso proporcionado por un servidor de recursos para acceder a una API. Por ejemplo, https://auth0.com/blog/why-should-use-accesstokens-to-secure-an-api/

La razón que se menciona para esto es que la propiedad “aud” en el token de ID no será la correcta si se usa en la API.

Sé que algunas fuentes dicen que si la aplicación de página única (SPA) y la API se sirven desde el mismo servidor y tienen el mismo ID de cliente y, por lo tanto, la misma audiencia, puedo usar un token de ID para autenticar en la API, pero estoy buscando entender qué puedo hacer cuando esto no sea así.

Siento que usar OAuth2 para la autorización es excesivo para mi aplicación y no puedo encontrar información sobre cómo usar OpenID Connect para autenticar en mi API.

¿No es cierto que cuando inicias sesión en un servidor de autorización de Auth0 usando Google, simplemente solicita un token de ID de OpenID Connect a Google?

Me pregunto si usar Authorization Code Grant Flow para recibir un token de ID en el servidor de la API me permitiría autenticar a un usuario en mi API.

En este caso, ¿el servidor de la API sería el cliente en cuanto a OpenID Connect se refiere y, por lo tanto, el valor “aud” sería el correcto?

Puedo generar una URL para visitar el servidor de autenticación de Google usando la biblioteca de Node js Googleapis de la siguiente manera:

“`const { google } = require(“googleapis”);

const oauth2Client = new google.auth.OAuth2(
"ID de cliente", "secreto de cliente",
"http://localhost:3000/oauthcallback",// aquí es donde se sirve la aplicación React
);

const calendar = google.calendar({ version: "v3", auth: oauth2Client });

const scopes = ["openid"];

const url = oauth2Client.generateAuthUrl({
// "online" (predeterminado) o "offline" (obtiene un token de actualización)
access_type: "offline",
// Si solo necesita un alcance, puede pasarlo como una cadena
scope: scopes,
});

async function getUrl(req, res) {
console.log(url)
res.status(200).json({
url,
});
}“`

y usar el siguiente flujo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para permitir a los usuarios iniciar sesión con Google y obtener autorización para crear y acceder a recursos en la API construida con Express en una aplicación MERN, se puede usar OpenID Connect para la autenticación. OAuth 2.0 se puede usar para la autorización, aunque puede ser excesivo para las necesidades de la aplicación.

    Un cliente puede usar un token de identificación, y un servidor de recursos puede usar un token de acceso para acceder a una API. Sin embargo, la propiedad ‘aud’ en el token de identificación no sería correcta si se usa en la API. Si el SPA y la API se sirven desde el mismo servidor y tienen el mismo ID de cliente y audiencia, se puede usar el token de identificación para autenticar al usuario en la API. Sin embargo, en situaciones donde no lo son, se puede tomar un enfoque diferente.

    Usar el flujo de concesión de código de autorización para recibir un token de identificación en el servidor de API permitiría autenticar a un usuario en su API. En este caso, el servidor de API sería el cliente en lo que respecta a OpenID Connect, lo que resultaría en que el valor ‘aud’ sea correcto.

    Para generar una URL para visitar el servidor de OAuth de Google utilizando la biblioteca Googleapis de Node, el módulo OAuth2 debe inicializarse con la identificación del cliente, el secreto del cliente y el URI de devolución de llamada, donde se sirve la aplicación React. La URL generada se puede usar para el flujo de autenticación.

    En resumen, se puede usar OpenID Connect para la autenticación, mientras que OAuth 2.0 se puede usar para la autorización. El flujo de concesión de código de autorización se puede utilizar para recibir un token de identificación en el servidor de API para autenticar al usuario. Se proporciona el fragmento de código necesario para generar la URL y el diagrama de flujo para el servidor de OAuth de Google.

Comments are closed.