Compartir a través de


IdentityServer para aplicaciones nativas de nube

Sugerencia

Este contenido es un extracto del libro electrónico, Arquitectura de aplicaciones .NET nativas de nube para Azure, disponible en .NET Docs o como un PDF descargable gratuito que se puede leer sin conexión.

Miniatura de la portada del libro electrónico

IdentityServer es un servidor de autenticación que implementa openID Connect (OIDC) y estándares de OAuth 2.0 para ASP.NET Core. Está diseñado para proporcionar una manera común de autenticar las solicitudes a todas las aplicaciones, tanto si son puntos de conexión web, nativos, móviles o de API. IdentityServer se puede usar para implementar single Sign-On (SSO) para varias aplicaciones y tipos de aplicación. Se puede usar para autenticar usuarios reales a través de formularios de inicio de sesión y interfaces de usuario similares, así como la autenticación basada en servicios que normalmente implica la emisión, comprobación y renovación de tokens sin ninguna interfaz de usuario. IdentityServer está diseñado para ser una solución personalizable. Normalmente, cada instancia se personaliza para adaptarse a una organización individual o a un conjunto de necesidades de las aplicaciones.

Escenarios comunes de aplicaciones web

Normalmente, las aplicaciones deben admitir algunos o todos los escenarios siguientes:

  • Usuarios humanos que acceden a aplicaciones web con un explorador.
  • Usuarios humanos que acceden a las API web de back-end desde aplicaciones basadas en explorador.
  • Usuarios humanos en clientes móviles o nativos que acceden a las API web de back-end.
  • Otras aplicaciones que acceden a las API web de back-end (sin un usuario activo o una interfaz de usuario).
  • Es posible que cualquier aplicación tenga que interactuar con otras API web mediante su propia identidad o delegarla en la identidad del usuario.

escenarios y tipos de aplicación

Figura 8-1. Tipos y escenarios de aplicación.

En cada uno de estos escenarios, la funcionalidad expuesta debe protegerse frente al uso no autorizado. Como mínimo, esto suele requerir la autenticación del usuario o la entidad de seguridad que realiza una solicitud para un recurso. Esta autenticación puede usar uno de varios protocolos comunes, como SAML2p, WS-Fed o OpenID Connect. La comunicación con las API suele usar el protocolo OAuth2 y su compatibilidad con tokens de seguridad. Separar estos problemas críticos de seguridad transversales y sus detalles de implementación de las propias aplicaciones garantiza la coherencia y mejora la seguridad y el mantenimiento. La subcontratación de estos problemas a un producto dedicado, como IdentityServer, ayuda a eliminar la necesidad de que cada aplicación resuelva estos problemas por sí misma.

IdentityServer proporciona middleware que se ejecuta dentro de una aplicación ASP.NET Core y agrega compatibilidad con OpenID Connect y OAuth2 (consulte especificaciones admitidas). Las organizaciones crearían su propia aplicación ASP.NET Core mediante el middleware IdentityServer para actuar como STS para todos sus protocolos de seguridad basados en tokens. El middleware IdentityServer expone puntos de conexión para admitir la funcionalidad estándar, entre las que se incluyen:

  • Autorización (autenticación del usuario final)
  • Token (solicite un token mediante programación)
  • Detección (metadatos sobre el servidor)
  • Información de usuario (obtener información de usuario con un token de acceso válido)
  • Autorización del dispositivo (que se usa para iniciar la autorización de flujo de dispositivo)
  • Introspección (validación de tokens)
  • Revocación (anulación de tokens)
  • Finalizar sesión (desencadenar cierre de sesión único en todas las aplicaciones)

Empezar

IdentityServer está disponible:

Para obtener información más detallada sobre los precios, consulte la página de precios oficial.

Puede agregarlo a las aplicaciones mediante sus paquetes NuGet. El paquete principal es IdentityServer, que se ha descargado más de cuatro millones de veces. El paquete base no incluye ningún código de interfaz de usuario y solo admite la configuración en memoria. Para usarlo con una base de datos, también querrá de un proveedor de datos como Duende.IdentityServer.Storage, que usa Entity Framework Core para almacenar la configuración y los datos operativos de IdentityServer. En el caso de la interfaz de usuario, puede copiar archivos del repositorio de interfaz de usuario de inicio rápido de en la aplicación MVC de ASP.NET Core para agregar compatibilidad con el inicio de sesión y cierre de sesión mediante el middleware IdentityServer.

Configuración

IdentityServer admite diferentes tipos de protocolos y proveedores de autenticación social que se pueden configurar como parte de cada instalación personalizada. Normalmente, esto se hace en la clase Program de la aplicación ASP.NET Core (o en la clase Startup del método ConfigureServices). La configuración implica especificar los protocolos admitidos y las rutas de acceso a los servidores y puntos de conexión que se usarán. En la figura 8-2 se muestra una configuración de ejemplo tomada de la Guía rápida de IdentityServer para el proyecto de aplicaciones ASP.NET Core:

// some details omitted
builder.Services.AddIdentityServer();

builder.Services.AddAuthentication(options =>
    {
        options.DefaultScheme = "Cookies";
        options.DefaultChallengeScheme = "oidc";
    })
    .AddCookie("Cookies")
    .AddGoogle("Google", options =>
    {
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

        options.ClientId = "<insert here>";
        options.ClientSecret = "<insert here>";
    })
    .AddOpenIdConnect("oidc", options =>
    {
        options.Authority = "https://localhost:5001";

        options.ClientId = "web";
        options.ClientSecret = "secret";
        options.ResponseType = "code";

        options.Scope.Clear();
        options.Scope.Add("openid");
        options.Scope.Add("profile");

        options.MapInboundClaims = false; // Don't rename claim types

        options.SaveTokens = true;
    });
}

Figura 8-2. Configuración de IdentityServer.

Clientes de JavaScript

Muchas aplicaciones nativas de nube usan API del lado servidor y aplicaciones de página única (SPA) de cliente enriquecidas en el front-end. IdentityServer envía un cliente de JavaScript (oidc-client.js) a través de NPM que se puede agregar a los SPA para permitirles usar IdentityServer para iniciar sesión, cerrar sesión y autenticación basada en tokens de las API web. Además, puede usar un back-end para front-end (BFF) que implemente todas las interacciones del protocolo de seguridad con el servidor de tokens y la OAuth 2.0 de IETF para Browser-Based Applications especificación.

Referencias