Compartir a través de


Inicio rápido: Llamada a una API web en una aplicación de demonio de ejemplo

Se aplica a: Círculo verde con un símbolo de marca de verificación blanca que indica que el siguiente contenido se aplica a los inquilinos de la fuerza de trabajo. Círculo verde de inquilinos de recursos con un símbolo de marca de verificación blanca que indica que el siguiente contenido se aplica a los inquilinos externos. Inquilinos externos (más información)

En este inicio rápido, usará una aplicación de demonio de ejemplo para adquirir un token de acceso y llamar a una API web protegida mediante la Biblioteca de autenticación de Microsoft (MSAL).

Antes de empezar, use el selector Elegir un tipo de inquilino en la parte superior de esta página para seleccionar el tipo de inquilino. El id. de Microsoft Entra proporciona dos configuraciones de inquilino, recursos yexternos. Una configuración de inquilino del personal es para los empleados, las aplicaciones internas y otros recursos de la organización. Un inquilino externo es para las aplicaciones orientadas al cliente.

La aplicación de ejemplo que usa en este inicio rápido adquiere un token de acceso para llamar a Microsoft Graph API.

Prerrequisitos

  • Una cuenta de Azure con una suscripción activa. Si aún no tiene una, cree una cuenta de forma gratuita.
  • Esta cuenta de Azure debe tener permisos para administrar aplicaciones. Cualquiera de los siguientes roles de Microsoft Entra incluye los permisos necesarios:
    • Administrador de aplicaciones
    • Desarrollador de aplicaciones
    • Administrador de aplicaciones en la nube
  • Un inquilino de personal. Puede usar el directorio predeterminado o configurar un nuevo inquilino.
  • Registre una nueva aplicación en el Centro de administración de Microsoft Entra, configurada solo para Cuentas en este directorio organizativo. Consulte Registro de una aplicación para obtener más detalles. Registre los valores siguientes en la página Información general de la aplicación para su uso posterior:
    • Id. de aplicación (cliente)
    • Id. de directorio (inquilino)
  • Agregue un secreto de cliente al registro de la aplicación. No use secretos de cliente en aplicaciones de producción. En su lugar, use certificados o credenciales federadas. Para más información, consulte Incorporación de credenciales a la aplicación.

Concesión de permisos de API a la aplicación de demonio

Para que la aplicación demonio acceda a los datos de Microsoft Graph API, conceda los permisos que necesita. La aplicación demonio necesita permisos de tipo de aplicación. Los usuarios no pueden interactuar con una aplicación de demonio, por lo que el administrador de inquilinos debe dar su consentimiento a estos permisos. Siga estos pasos para conceder y dar su consentimiento a los permisos:

En el caso de la aplicación de demonio de .NET, no es necesario conceder ni dar su consentimiento a ningún permiso. Esta aplicación demonio lee su propia información de registro de aplicaciones, por lo que puede hacerlo sin conceder permisos de aplicación.

Clonar o descargar la aplicación de ejemplo

Para obtener la aplicación de ejemplo, puede clonarla desde GitHub o descargarla como un archivo .zip .

  • Para clonar el ejemplo, abra un símbolo del sistema y vaya a dónde desea crear el proyecto y escriba 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 del proyecto

Para usar los detalles del registro de la aplicación en el ejemplo de aplicación de demonio de cliente, siga estos pasos:

  1. Abra una ventana de consola y vaya al directorio ms-identity-docs-code-dotnet/console-daemon :

    cd ms-identity-docs-code-dotnet/console-daemon
    
  2. Abra Program.cs y reemplace el contenido del archivo por el siguiente fragmento de código;

     // Full directory URL, in the form of https://login.microsoftonline.com/<tenant_id>
     Authority = " https://login.microsoftonline.com/Enter_the_tenant_ID_obtained_from_the_Microsoft_Entra_admin_center",
     // 'Enter the client ID obtained from the Microsoft Entra admin center
     ClientId = "Enter the client ID obtained from the Microsoft Entra admin center",
     // Client secret 'Value' (not its ID) from 'Client secrets' in the Microsoft Entra admin center
     ClientSecret = "Enter the client secret value obtained from the Microsoft Entra admin center",
     // Client 'Object ID' of app registration in Microsoft Entra admin center - this value is a GUID
     ClientObjectId = "Enter the client Object ID obtained from the Microsoft Entra admin center"
    
    • Authority - La autoridad es una dirección URL que indica un directorio desde el que MSAL puede solicitar tokens. Reemplace Enter_the_tenant_ID_obtained_from_the_Microsoft_Entra_admin_center por el valor de identificador de directorio (inquilino) que se registró anteriormente.
    • ClientId - El identificador de la aplicación, también conocido como el cliente. Reemplace el texto entre comillas por el Application (client) ID valor que se registró anteriormente en la página de información general de la aplicación registrada.
    • ClientSecret - El secreto de cliente creado para la aplicación en el Centro de administración de Microsoft Entra. Escriba el valor del secreto de cliente.
    • ClientObjectId : el identificador de objeto de la aplicación cliente. Reemplace el texto entre comillas por el Object ID valor que registró anteriormente en la página de información general de la aplicación registrada.

Ejecución y prueba de la aplicación

Ha configurado la aplicación de ejemplo. Puede continuar para ejecutarlo y probarlo.

En la ventana de la consola, ejecute el siguiente comando para compilar y ejecutar la aplicación:

dotnet run

Una vez que la aplicación se ejecuta correctamente, muestra una respuesta similar al siguiente fragmento de código (abreviado para mayor brevedad):

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applications/$entity",
"id": "00001111-aaaa-2222-bbbb-3333cccc4444",
"deletedDateTime": null,
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"applicationTemplateId": null,
"disabledByMicrosoftStatus": null,
"createdDateTime": "2021-01-17T15:30:55Z",
"displayName": "identity-dotnet-console-app",
"description": null,
"groupMembershipClaims": null,
...
}

Cómo funciona

Una aplicación de demonio adquiere un token en nombre propio (no en nombre de un usuario). Los usuarios no pueden interactuar con una aplicación de demonio porque requiere su propia identidad. Este tipo de aplicación solicita un token de acceso mediante su identidad de aplicación mediante la presentación de su identificador de aplicación, credencial (secreto o certificado) y un URI de identificador de aplicación. La aplicación de demonio usa el flujo de concesión de credenciales de cliente estándar de OAuth 2.0 para adquirir un token de acceso.

La aplicación adquiere un token de acceso de la plataforma de identidad de Microsoft. El token de acceso está en el ámbito de Microsoft Graph API. A continuación, la aplicación usa el token de acceso para solicitar sus propios detalles de registro de aplicaciones desde Microsoft Graph API. La aplicación puede solicitar cualquier recurso de Microsoft Graph API siempre que el token de acceso tenga los permisos adecuados.

En el ejemplo se muestra cómo un trabajo desatendido o un servicio de Windows se pueden ejecutar con una identidad de aplicación, en lugar de la identidad de un usuario.

Prerrequisitos

  • Una cuenta de Azure con una suscripción activa. Si aún no tiene una, cree una cuenta de forma gratuita.
  • Esta cuenta de Azure debe tener permisos para administrar aplicaciones. Cualquiera de los siguientes roles de Microsoft Entra incluye los permisos necesarios:
    • Administrador de aplicaciones
    • Desarrollador de aplicaciones
    • Administrador de aplicaciones en la nube
  • Un inquilino externo. Para crear uno, elija entre los métodos siguientes:
  • Registre una nueva aplicación en el Centro de administración de Microsoft Entra con la siguiente configuración. Para obtener más información, consulte Registro de una aplicación.
    • Nombre: ciam-daemon-app
    • Tipos de cuenta admitidos: solo las cuentas de este directorio organizativo (inquilino único)
  • Visual Studio Code u otro editor de código.
  • .NET 7.0 o posterior.
  • Node.js (solo para la implementación de Node)

Creación de un secreto de cliente

Cree un secreto de cliente para la aplicación registrada. La aplicación usa el secreto de cliente para demostrar su identidad cuando solicita tokens:

  1. En la página Registros de aplicaciones, seleccione la aplicación que creó (por ejemplo, el secreto de cliente de la aplicación web) para abrir su página Información general .
  2. En Administrar, seleccione Certificados y secretos Secretos>de>cliente Nuevo secreto de cliente.
  3. En el cuadro Descripción , escriba una descripción para el secreto de cliente (por ejemplo, secreto de cliente de la aplicación web).
  4. En Expirar, seleccione una duración para la que el secreto sea válido (según las reglas de seguridad de las organizaciones) y, a continuación, seleccione Agregar.
  5. Registre el valor del secreto. Este valor se usa para la configuración en un paso posterior. El valor del secreto no se volverá a mostrar y no se podrá recuperar por ningún medio, después de salir de los certificados y secretos. Asegúrese de grabarlo.

Al crear credenciales para una aplicación cliente confidencial:

  • Microsoft recomienda usar un certificado en lugar de un secreto de cliente antes de mover la aplicación a un entorno de producción. Para obtener más información sobre cómo usar un certificado, consulte las instrucciones de credenciales de certificado de autenticación de aplicaciones de la plataforma de identidad de Microsoft.

  • Con fines de prueba, puede crear un certificado autofirmado y configurar las aplicaciones para autenticarse con él. Sin embargo, en producción, debe comprar un certificado firmado por una entidad de certificación conocida y, a continuación, usar Azure Key Vault para administrar el acceso y la duración del certificado.

Concesión de permisos de API a la aplicación de demonio

  1. En la página Registros de aplicaciones, seleccione la aplicación que creó, como ciam-client-app.

  2. En Administrar, seleccione Permisos de API.

  3. En Permisos configurados, seleccione Agregar un permiso.

  4. Seleccione la pestaña API que usa mi organización .

  5. En la lista de API, seleccione la API como ciam-ToDoList-api.

  6. Seleccione la opción Permisos de aplicación . Seleccionamos esta opción como la aplicación inicia sesión como sí misma, pero no en nombre de un usuario.

  7. En la lista de permisos, seleccione TodoList.Read.All, ToDoList.ReadWrite.All (use el cuadro de búsqueda si es necesario).

  8. Seleccione el botón Agregar permisos .

  9. En este momento, ha asignado los permisos correctamente. Sin embargo, dado que la aplicación de demonio no permite a los usuarios interactuar con él, los propios usuarios no pueden dar su consentimiento a estos permisos. Para solucionar este problema, como administrador debe dar su consentimiento a estos permisos en nombre de todos los usuarios del inquilino:

    1. Seleccione Conceder consentimiento del administrador para <el nombre> del inquilino y, a continuación, seleccione .
    2. Seleccione Actualizar y compruebe que Concedido para <el nombre> del inquilino aparece en Estado para ambos permisos.

Configuración de roles de aplicación

Una API debe publicar un mínimo de un rol de aplicación para las aplicaciones, también denominado Permiso de aplicación, para que las aplicaciones cliente obtengan un token de acceso como ellos mismos. Los permisos de aplicación son el tipo de permisos que las API deben publicar cuando quieran permitir que las aplicaciones cliente se autentiquen correctamente como ellos mismos y no necesiten iniciar sesión de los usuarios. Para publicar un permiso de aplicación, siga estos pasos:

  1. En la página Registros de aplicaciones, seleccione la aplicación que creó (por ejemplo , ciam-ToDoList-api) para abrir su página Información general .

  2. En Administrar, seleccione Roles de aplicación.

  3. Seleccione Crear rol de aplicación y, a continuación, escriba los valores siguientes y, después, seleccione Aplicar para guardar los cambios:

    Propiedad Importancia
    Nombre para mostrar ToDoList.Read.All
    Tipos de miembros permitidos Aplicaciones
    Importancia ToDoList.Read.All
    Description Permitir que la aplicación lea la lista ToDo de todos los usuarios mediante "TodoListApi".
    ¿Desea habilitar este rol de aplicación? Mantenerla activada
  4. Vuelva a seleccionar Crear rol de aplicación y, a continuación, escriba los valores siguientes para el segundo rol de aplicación y, después, seleccione Aplicar para guardar los cambios:

    Propiedad Importancia
    Nombre para mostrar ToDoList.ReadWrite.All
    Tipos de miembros permitidos Aplicaciones
    Importancia ToDoList.ReadWrite.All
    Description Permitir que la aplicación lea y escriba la lista ToDo de todos los usuarios mediante "ToDoListApi".
    ¿Desea habilitar este rol de aplicación? Mantenerla activada

Configurar reclamaciones opcionales

Puede agregar la notificación opcional idtyp para ayudar a la API web a determinar si un token es un token de aplicación o un token de aplicación y un token de usuario. Aunque puede usar una combinación de notificaciones de scp y roles para el mismo propósito, el uso de la notificación de idtyp es la manera más fácil de indicar un token de aplicación y una aplicación + token de usuario aparte. Por ejemplo, el valor de esta notificación es app cuando el token es un token de solo aplicación.

Clonar o descargar la aplicación de demonio de ejemplo y la API web

Para obtener la aplicación de ejemplo, puede clonarla desde GitHub o descargarla como un archivo .zip.

  • Para clonar el ejemplo, abra un símbolo del sistema y vaya a dónde desea crear el proyecto y escriba el siguiente comando:

    git clone https://github.com/Azure-Samples/ms-identity-ciam-javascript-tutorial.git
    
  • Como alternativa, descargue los ejemplos .zip archivo y extráigalo en una ruta de acceso de archivo donde la longitud del nombre sea inferior a 260 caracteres.

Instalación de dependencias del proyecto

  1. Abra una ventana de consola y cambie al directorio que contiene la aplicación de ejemplo Node.js:

    cd 2-Authorization\3-call-api-node-daemon\App
    
  2. Ejecute los comandos siguientes para instalar las dependencias de la aplicación:

    npm install && npm update
    

Configuración de la aplicación de demonio de ejemplo y la API

Para usar los detalles del registro de aplicaciones en el ejemplo de aplicación web cliente, siga estos pasos:

  1. En el editor de código, abra App\authConfig.js el archivo.

  2. Busque el marcador de posición:

    • Enter_the_Application_Id_Here y reemplácelo por el identificador de aplicación (cliente) de la aplicación de demonio que registró anteriormente.

    • Enter_the_Tenant_Subdomain_Here y reemplácelo por el subdominio Directorio (inquilino). Por ejemplo, si el dominio principal del inquilino es contoso.onmicrosoft.com, use contoso. Si no tiene el nombre del inquilino, aprenda a leer los detalles del inquilino.

    • Enter_the_Client_Secret_Here y reemplácelo por el valor del secreto de la aplicación de demonio que copió anteriormente.

    • Enter_the_Web_Api_Application_Id_Here y reemplácelo por el identificador de aplicación (cliente) de la API web que copió anteriormente.

Para usar el registro de la aplicación en el ejemplo de API web:

  1. En el editor de código, abra API\ToDoListAPI\appsettings.json el archivo.

  2. Busque el marcador de posición:

    • Enter_the_Application_Id_Here y reemplácelo por el identificador de aplicación (cliente) de la API web que copió.

    • Enter_the_Tenant_Id_Here y reemplácelo por el identificador de directorio (inquilino) que copió anteriormente.

    • Enter_the_Tenant_Subdomain_Here y reemplácelo por el subdominio Directorio (inquilino). Por ejemplo, si el dominio principal del inquilino es contoso.onmicrosoft.com, use contoso. Si no tiene el nombre del inquilino, aprenda a leer los detalles del inquilino.

Ejecución y prueba de la aplicación y la API de demonio de ejemplo

Ha configurado la aplicación de ejemplo. Puede continuar para ejecutarlo y probarlo.

  1. Abra una ventana de consola y ejecute la API web mediante los siguientes comandos:

    cd 2-Authorization\3-call-api-node-daemon\API\ToDoListAPI
    dotnet run
    
  2. Ejecute el cliente de la aplicación web mediante los siguientes comandos:

    2-Authorization\3-call-api-node-daemon\App
    node . --op getToDos
    

Si la aplicación de demonio y la API web se ejecutan correctamente, debería ver algo similar a la siguiente matriz JSON en la ventana de la consola.

{
    "id": 1,
    "owner": "3e8....-db63-43a2-a767-5d7db...",
    "description": "Pick up grocery"
},
{
    "id": 2,
    "owner": "c3cc....-c4ec-4531-a197-cb919ed.....",
    "description": "Finish invoice report"
},
{
    "id": 3,
    "owner": "a35e....-3b8a-4632-8c4f-ffb840d.....",
    "description": "Water plants"
}

Cómo funciona

La aplicación Node.js usa el flujo de concesión de credenciales de cliente de OAuth 2.0 para adquirir un token de acceso para sí mismo y no para el usuario. El token de acceso que solicita la aplicación contiene los permisos representados como roles. El flujo de credenciales de cliente usa este conjunto de permisos en lugar de ámbitos de usuario para tokens de aplicación. Ha expuesto estos permisos de aplicación en la API web anteriormente y, a continuación, los concedió a la aplicación de demonio.

En la API, una API web de .NET de ejemplo, la API debe comprobar que el token de acceso tiene los permisos necesarios (permisos de aplicación). La API web no puede aceptar un token de acceso que no tenga los permisos necesarios.

Acceso a datos

Un punto de conexión de API web debe estar preparado para aceptar llamadas de usuarios y aplicaciones. Por lo tanto, debe tener una manera de responder a cada solicitud en consecuencia. Por ejemplo, una llamada de un usuario a través de permisos o ámbitos delegados recibe la lista de datos del usuario to-do. Por otro lado, una llamada desde una aplicación a través de permisos o roles de aplicación puede recibir toda la lista de to-do. Sin embargo, en este artículo, solo estamos realizando una llamada a una aplicación, por lo que no es necesario configurar los permisos o ámbitos delegados.