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

Registrar 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.

  1. Inicie sesión en el Centro de administración de Microsoft Entra al menos como Desarrollador de aplicaciones.

  2. 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.

  3. Vaya aIdentidad>Aplicaciones>Registros de aplicaciones.

  4. Seleccione Nuevo registro.

  5. Ponle un Nombre a la aplicación, como NewWebAPI1.

  6. 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.

  7. Seleccione Registrar.

    Captura de pantalla en la que se muestra cómo ingresar un nombre y seleccionar el tipo de cuenta.

  8. El panel Información general de la aplicación se muestra cuando se completa el registro. Registrar el id. de directorio (inquilino) y el id. de aplicación (cliente) que se usará en el código fuente de la aplicación.

    Captura de pantalla en la que se muestran los valores de identificador en la página de información general.

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.

  1. En Administrar, seleccione Exponer una API > Agregar un ámbito. Seleccione Guardar y continuar para aceptar el URI de identificador de aplicación propuesto(api://{clientId}). {clientId} es el valor registrado en la página Información general. A continuación, escriba la siguiente información:

    1. Para Scope name (Nombre de ámbito), escriba Forecast.Read.
    2. 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.
    3. En el cuadro Admin consent display name (Nombre para mostrar del consentimiento del administrador), escriba Read forecast data (Acceder a TodoListService como usuario).
    4. 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).
    5. En el cuadro User consent display name (Nombre para mostrar del consentimiento del usuario), escriba Read forecast data (Acceder a TodoListService como usuario).
    6. 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).
    7. Asegúrate de que el Estado esté establecido en Habilitado.
  2. Seleccione la opción Agregar un ámbito. Si el ámbito se ha indicado correctamente, aparece en el panel Exponer una API.

    Captura de pantalla que muestra los valores de campo al agregar el ámbito a 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

  1. En su IDE, abra la carpeta del proyecto, ms-identity-docs-code-dotnet/web-api, que contiene la muestra.

  2. 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 texto value 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 texto value 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

  1. Ejecute el siguiente comando para iniciar la aplicación:

    dotnet run
    
  2. Aparece una salida similar a la del ejemplo siguiente:

    ...
    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: https://localhost:{port}
    ...
    

    Registre el número de puerto en la dirección URL https://localhost:{port}.

  3. Para comprobar que el punto de conexión está protegido, use el siguiente comando cURL en Bash para enviar una solicitud HTTP GET no autenticada en Bash:

    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