Inicio rápido: Protección de una API web de ASP.NET Core con la plataforma de identidad de Microsoft
En este inicio rápido se usa un ejemplo de código de API web de ASP.NET Core para demostrar cómo restringir el acceso a los recursos a las cuentas autorizadas. En el ejemplo se usa ASP.NET Core Identity que interactúa con la biblioteca de autenticación de Microsoft (MSAL) para controlar la autenticación.
Requisitos previos
- Cuenta de Azure con una suscripción activa. Si no tiene ninguna cuenta, cree una gratuita.
- Se necesita como mínimo el SDK de NET 8.0
- Visual Studio 2022 o Visual Studio Code
Registro de la aplicación y los identificadores de registro
Sugerencia
Los pasos de este artículo pueden variar ligeramente en función del portal desde donde comienza.
Para completar el registro, proporcione un nombre a la aplicación y especifique los tipos de cuenta admitidos. Una vez registrada, el panel Información general de la aplicación muestra los identificadores necesarios en el código fuente de la aplicación.
Inicie sesión en el Centro de administración de Microsoft Entra al menos como Desarrollador de aplicaciones.
Si tiene acceso a varios inquilinos, use el icono Configuración del menú superior para cambiar al inquilino en el que desea registrar la aplicación desde el menú Directorios y suscripciones.
Vaya aIdentidad>Aplicaciones>Registros de aplicaciones.
Seleccione Nuevo registro.
Ponle un Nombre a la aplicación, como NewWebAPI1.
Para la opción Tipos de cuenta admitidos, seleccione Solo las cuentas de este directorio organizativo. Para obtener información sobre los distintos tipos de cuenta, selecciona la opción Ayudarme a elegir.
Seleccione Registrar.
El panel Información general de la aplicación se muestra cuando se completa el registro. Registra el id. de directorio (inquilino) y el id. de aplicación (cliente) que se usará en el código fuente de la aplicación.
Nota
Los tipos de cuenta admitidos pueden modificarse consultando Modificar las cuentas que admite una aplicación.
Exponer una API
Una vez registrada la API, puedes configurar tu permiso definiendo los ámbitos que expone la API a las aplicaciones cliente. Las aplicaciones cliente solicitan permiso para realizar operaciones mediante el paso de un token de acceso junto con sus solicitudes a la API web protegida. Luego, la API web realiza la operación solicitada solo si el token de acceso que recibe contiene los ámbitos requeridos.
En Administrar, seleccione Exponer una API > Agregar un ámbito. Seleccione Guardar y continuar para aceptar el identificador URI del id. de aplicación
(api://{clientId})
propuesto.{clientId}
es el valor registrado en la página Información general. A continuación, escriba la siguiente información:- Para Scope name (Nombre de ámbito), escriba
Forecast.Read
. - Para Who can consent (Quién puede dar el consentimiento), asegúrese de que la opción Admins and users (Administradores y usuarios) está seleccionada.
- En el cuadro Admin consent display name (Nombre para mostrar del consentimiento del administrador), escriba
Read forecast data
(Acceder a TodoListService como usuario). - En el cuadro Admin consent description (Descripción del consentimiento del administrador), escriba
Allows the application to read weather forecast data
(Accede a la API web TodoListService como usuario). - En el cuadro User consent display name (Nombre para mostrar del consentimiento del usuario), escriba
Read forecast data
(Acceder a TodoListService como usuario). - En el cuadro User consent description (Descripción del consentimiento del usuario), escriba
Allows the application to read weather forecast data
(Accede a la API web TodoListService como usuario). - Asegúrate de que el Estado esté establecido en Habilitado.
- Para Scope name (Nombre de ámbito), escriba
Seleccione la opción Agregar un ámbito. Si el ámbito se ha indicado correctamente, aparece en el panel Exponer una API.
Clone o descargue la aplicación de ejemplo
Para obtener la aplicación de ejemplo, puede clonarla desde GitHub o descargarla como archivo .zip.
Para clonar la muestra, abra un símbolo del sistema y navegue hasta donde desea crear el proyecto, e introduzca el siguiente comando:
git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
Descargue el archivo .zip. Extráigalo en una ruta de acceso de archivo donde la longitud del nombre sea inferior a 260 caracteres.
Configuración de la aplicación de ejemplo de ASP.NET Core
En su IDE, abra la carpeta del proyecto, ms-identity-docs-code-dotnet/web-api, que contiene la muestra.
Abra el archivo
appsettings.json
, que contiene el siguiente fragmento de código:{ "AzureAd": { "Instance": "https://login.microsoftonline.com/", "TenantId": "Enter the tenant ID obtained from the Microsoft Entra admin center", "ClientId": "Enter the client ID obtained from the Microsoft Entra admin center", "Scopes": "Forecast.Read" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
Busque el siguiente
key
:ClientId
- El identificador de la aplicación, también denominado cliente. Reemplace el textovalue
entre comillas por el identificador de la aplicación (cliente) que se registró anteriormente en la página de información general de la aplicación registrada.TenantId
- El identificador del inquilino donde se registra la aplicación. Reemplace el textovalue
entre comillas por el valor de identificador del directorio (inquilino) que se registró anteriormente en la página de información general de la aplicación registrada.
Ejecutar la aplicación de ejemplo
Ejecute el siguiente comando para iniciar la aplicación:
dotnet run
Aparece una salida similar a la del ejemplo siguiente:
... info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:{port} ...
Registre el número de puerto en la dirección URL
http://localhost:{port}
.Para comprobar que el punto de conexión está protegido, actualice la dirección URL base en el siguiente comando cURL para que coincida con la que recibió en el paso anterior y, a continuación, ejecute el comando:
curl -X GET https://localhost:5001/weatherforecast -ki
La respuesta esperada es 401 No autorizado con una salida similar a la siguiente:
user@host:~$ curl -X GET https://localhost:5001/weatherforecast -ki HTTP/2 401 date: Fri, 23 Sep 2023 23:34:24 GMT server: Kestrel www-authenticate: Bearer content-length: 0
Pasos siguientes
Continúe con el siguiente artículo para aprender a llamar a la API web protegida mediante cURL.