Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

483
Visualizações
OpenID Connect en Angular SPA con Asp.Net Core 3.1 Backend

Quiero construir un SPA (Angular) con un back-end (Asp.Net Core) y quiero usar las mejores prácticas de seguridad. Mi plan es este:

  1. El SPA muestra un botón Iniciar sesión
  2. Al hacer clic en el botón Iniciar sesión , se inicia un flujo de código de autorización openid-connect con algún proveedor de identidad (Google, Microsoft, etc.)
  3. El usuario se autentica con el proveedor de identidad y luego se le redirige al SPA con el código de autorización
  4. Luego, el SPA realiza una solicitud de inicio de sesión al back-end y pasa el código de autorización
  5. El back-end realiza una solicitud al proveedor de identidad, intercambia el código por un id_token y crea algún tipo de ticket de sesión para el usuario.

Ahora, aquí es donde me empantano por mi falta de comprensión adecuada.

Número 1: mejores prácticas

¿El procedimiento anterior se considera incluso una mejor práctica? ¿O lo estoy haciendo mal?

Problema 2 - Ticket de autenticación

Mi back-end es solo API, no muestra páginas HTML para el usuario, solo proporciona respuestas Json. ¿Qué tipo de ticket de autenticación debo crear? ¿Debería ser un JWT o una Cookie? Supongo que no puede ser una cookie ya que la API no puede devolver una cookie que el navegador almacenará correctamente. Entonces debe ser algún tipo de token, preferiblemente un JWT. ¿Cómo debe almacenarlo el SPA, almacenamiento local/sesión?

Problema 3: Caducidad y actualización

Suponiendo que el back-end devuelve un JWT al SPA, ¿qué debe contener este JWT? ¿Cuál debería ser su tiempo de caducidad? ¿Cómo debo manejar la actualización automática?

Problema 4 - Paquetes y bibliotecas requeridos

Además, específicamente para la programación (dado que esta es una pregunta de programación después de todo), ¿cuáles son las bibliotecas requeridas para usar para todo esto? La pregunta es tanto para el SPA como para el back-end. Supongo que necesito algún tipo de cliente de conexión abierta para el SPA, y necesito alguna biblioteca en el back-end que pueda completar el flujo del código de autorización (intercambiando el código por el id_token ) ¿Esto lo hace IdentityServer4 ? O hay alguna otra biblioteca.

ACTUALIZAR

He preparado una solución que se esfuerza por mostrar la forma correcta de hacer todo. Es un trabajo en progreso, desordenado y sucio, pero es mínimo, funciona y se esfuerza por seguir las mejores prácticas.

https://github.com/paviad/dotnet-angular-fullstack

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

OpenID Connect es un estándar (además de OAuth 2.0) y tiene muchos flujos (usted mencionó un Authorization Code flow , que no es el mejor para SPA.

Se recomendó Implicit flow para aplicaciones SPA, donde SPA recibe tokens directamente del IdP. El flujo implícito está obsoleto ahora y el Authorization Code with PKCE Flow es la mejor opción para SPA en este momento. Esta publicación de blog aleatoria le brindará más detalles sobre estos flujos.

SPA también puede recibir un token de actualización, que se puede usar para obtener un nuevo token de acceso, pero depende del IdP usado.

El backend solo necesita la biblioteca para verificar el token (del encabezado de Authorization de la solicitud), eventualmente necesita verificar algunos reclamos (por ejemplo, el rol) para autorizaciones opcionales. No necesita manejar ningún flujo OIDC, porque se comunica a través del código de respuesta generalmente (200, 401, 403, 500, ...) de regreso a SPA y SPA maneja errores.

En mi humilde opinión, simplemente seleccione la biblioteca adecuada (preferir la certificación OIDC ) para su SPA ( mi favorito para Angular ) y proporcionará muchas características útiles de SPA listas para usar (flujo correcto, actualización de token, almacenamiento de token, interceptor http para llamadas back-end, ... ). Evitaría las bibliotecas proporcionadas por IdP: puede ser una ganancia rápida para la implementación, pero puede ser un bloqueo del proveedor de IdP si brindan alguna funcionalidad fuera del estándar OIDC.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda