Compartir a través de


Escenario: API Web de llamada (en nombre de escenario)

Obtenga información sobre cómo crear una API web que llame a otra API web en nombre del usuario.

Antes de leer este artículo, debe estar familiarizado con los conceptos de AD FS y el flujo Behalf_Of

Información general

  • Un cliente (aplicación web), no se representa en el diagrama siguiente, llama a una API web protegida y proporciona un token de portador JWT en el encabezado HTTP "Autorización".

  • La API web protegida valida el token y usa el método MSAL AcquireTokenOnBehalfOf para solicitar (a AD FS) otro token para poder, por sí, llamar a una segunda API web (denominada la API web de bajada) en nombre del usuario.

  • La API web protegida usa este token para llamar a una API de bajada. También puede llamar a AcquireTokenSilentlater para solicitar tokens para otras API de bajada (pero todavía en nombre del mismo usuario). AcquireTokenSilent actualiza el token cuando sea necesario.

    Introducción

Para comprender mejor cómo configurar el escenario de autenticación "en nombre de" en AD FS, vamos a usar un ejemplo disponible aquí y seguiremos un tutorial sobre los pasos de configuración de código y registro de aplicaciones.

Requisitos previos

  • Herramientas de cliente de GitHub
  • AD FS 2019 o posterior configurado y en ejecución
  • Visual Studio 2013 o posterior.

Registro de aplicaciones en AD FS

En esta sección se muestra cómo registrar la aplicación nativa como un cliente público y las API web como usuarios de confianza (RP) en AD FS

  1. En Administración de AD FS, haga clic con el botón derecho en Grupos de aplicaciones y seleccione Agregar grupo de aplicaciones.

  2. En el Asistente para grupos de aplicaciones, en Nombre, escriba WebApiToWebApi y, en Aplicaciones cliente-Servidor, seleccione la Aplicación nativa que accede a una plantilla de API web. Haga clic en Next.

    Captura de pantalla de la página principal del Asistente para agregar un grupo de aplicaciones que muestra la plantilla Aplicación nativa accediendo a una API web resaltada.

  3. Copie el valor de Identificador de cliente. Se usará más adelante como valor de ClientId en el archivo App.config de la aplicación. Escriba lo siguiente para URI de redirección: - https://ToDoListClient. Haga clic en Agregar. Haga clic en Next.

    Captura de pantalla de la página Aplicación nativa del Asistente para agregar grupos de aplicaciones en la que se muestra la URI de redireccionamiento.

  4. En la pantalla Configurar API web, escriba el Identificador:https://localhost:44321/. Haga clic en Agregar. Haga clic en Next. Este valor se usará más adelante en los archivos App.config y Web.Config de la aplicación.

    Captura de pantalla de la página Configurar API web del Asistente para agregar grupos de aplicaciones que muestra el identificador correcto.

  5. En la pantalla Aplicar la directiva de Control de acceso, seleccione Permitir a todos y haga clic en Siguiente.

    Captura de pantalla de la página Elegir directiva de control de acceso del Asistente para agregar grupo de aplicaciones que muestra la opción Permitir todos resaltada.

  6. En la pantalla Configurar permisos de aplicación, seleccione openid y user_impersonation. Haga clic en Next.

    Captura de pantalla de la página Configurar permisos de aplicación del Asistente para agregar grupos de aplicaciones que muestra la opción openID seleccionada.

  7. En la pantalla Resumen, haga clic en Siguiente.

  8. En la pantalla Completa, haga clic en Cerrar.

  9. En Administración de AD FS, haga clic en Grupos de aplicaciones y seleccione el grupo de aplicaciones WebApiToWebApi. Haga clic con el botón secundario y seleccione Propiedades.

    Captura de pantalla del cuadro de diálogo Administración de AD FS que muestra el grupo WebApiToWebApi resaltado y la opción Propiedades de la lista desplegable.

  10. En la pantalla de propiedades WebApiToWebApi, haga clic en Agregar aplicación....

    Captura de pantalla del cuadro de diálogo Propiedades de WebApiToWebApi que muestra la aplicación WebApiToWebApi - API web enumerada.

  11. En Aplicaciones independientes, seleccione Aplicación de servidor.

    Captura de pantalla de la página principal del Asistente para agregar una nueva aplicación a WebApiToWebApi que muestra la opción Aplicación de servidor resaltada.

  12. En la pantalla Aplicación de servidor, agregue https://localhost:44321/ como Identificador de cliente y URI de redirección.

    Captura de pantalla de la página Aplicación de servidor del Asistente para agregar una nueva aplicación a WebApiToWebApi que muestra el identificador de cliente correcto y el URI de redirección.

  13. En la pantalla Configurar credenciales de aplicación, seleccione Generar un secreto compartido. Copie el secreto para su uso posterior.

    Captura de pantalla de la página de aplicación Configurar credenciales de aplicación del asistente Agregar una nueva aplicación a WebApiToWebApi en la que se muestra la opción Generar un secreto compartido seleccionado y el secreto compartido generado resaltado.

  14. En la pantalla Resumen, haga clic en Siguiente.

  15. En la pantalla Completa, haga clic en Cerrar.

  16. En Administración de AD FS, haga clic en Grupos de aplicaciones y seleccione el grupo de aplicaciones WebApiToWebApi. Haga clic con el botón secundario y seleccione Propiedades.

    Segunda captura de pantalla del cuadro de diálogo Administración de AD FS que muestra el grupo WebApiToWebApi resaltado y la opción Propiedades de la lista desplegable.

  17. En la pantalla de propiedades WebApiToWebApi, haga clic en Agregar aplicación....

    Segunda captura de pantalla del cuadro de diálogo Propiedades de WebApiToWebApi que muestra la aplicación WebApiToWebApi - API web enumerada.

  18. En Aplicaciones independientes, seleccione API web.

    Captura de pantalla de la página principal del Asistente para agregar una nueva aplicación a WebApiToWebApi que muestra la opción API web resaltada.

  19. En Configurar API web, agregue https://localhost:44300 como Identificador.

    Captura de pantalla de la página Configurar una API web del Asistente para agregar una nueva aplicación a WebApiToWebApi que muestra el URI de redirección correcto.

  20. En la pantalla Aplicar directiva de control de acceso, seleccione Permitir a todos y haga clic en Siguiente.

    Captura de pantalla de la página Elegir directiva de control de acceso del Asistente para agregar una nueva aplicación a WebApiToWebApi que muestra la opción Permitir todos resaltada.

  21. En la pantalla Configurar permisos de aplicación, haga clic en Siguiente.

    Captura de pantalla de la página Configurar permisos de aplicación del asistente Agregar una nueva aplicación a WebApiToWebApi que muestra la opción Siguiente resaltada.

  22. En la pantalla Resumen, haga clic en Siguiente.

  23. En la pantalla Completa, haga clic en Cerrar.

  24. Haga clic en Aceptar en la pantalla de WebApiToWebApi – Propiedades de API web 2

  25. En la pantalla Propiedades de WebApiToWebApi, seleccione WebApiToWebApi – API web y haga clic en Editar....

    Captura de pantalla del cuadro de diálogo Propiedades de WebApiToWebApi que muestra la aplicación WebApiToWebApi - API web resaltada.

  26. En la pantalla WebApiToWebApi – Propiedades de API web, seleccione la pestaña Reglas de transformación de emisión y haga clic en Agregar regla....

    Captura de pantalla del cuadro de diálogo Propiedades de WebApiToWebApi - API web en la que se muestra la pestaña Reglas de transformación de emisión.

  27. En el Asistente para agregar regla de notificaciones de transformación, seleccione Enviar notificaciones mediante regla personalizada en la lista desplegable y haga clic en Siguiente.

    Captura de pantalla de la página Seleccionar plantilla de regla del Asistente para agregar regla de notificaciones de transformación que muestra seleccionada la opción Enviar notificaciones mediante una regla personalizada seleccionada.

  28. Escriba PassAllClaims en el campo de Nombre de regla de notificación: y la regla de notificación x:[] => issue(claim=x); en el campo Regla personalizada: y haga clic en Finalizar.

    Captura de pantalla de la página Configurar regla del Asistente para agregar reglas de notificación de transformación que muestra la configuración que se explicó anteriormente.

  29. Haga clic en Aceptar en la pantalla WebApiToWebApi – Propiedades de la API web.

  30. En la pantalla Propiedades de WebApiToWebApi, seleccione WebApiToWebApi – API web 2 y haga clic en Editar...
    Captura de pantalla del cuadro de diálogo Propiedades de WebApiToWebApi que muestra la aplicación WebApiToWebApi -API web 2 resaltada.

  31. En la pantalla WebApiToWebApi – Propiedades de API web 2, seleccione la pestaña Reglas de transformación de emisión y haga clic en Agregar regla…

  32. En el Asistente para agregar regla de notificaciones de transformación, seleccione Enviar notificaciones mediante una regla personalizada en la lista desplegable y haga clic en Siguiente Segunda captura de pantalla de la página Seleccionar plantilla de regla del Asistente para agregar regla de notificaciones de transformación que muestra seleccionada la opción Enviar notificaciones mediante una regla personalizada seleccionada.

  33. Escriba PassAllClaims en el campo de Nombre de regla de notificación: y la regla de notificación x:[] => issue(claim=x); en el campo Regla personalizada: y haga clic en Finalizar.

    Segunda captura de pantalla de la página Configurar regla del Asistente para agregar reglas de notificación de transformación que muestra la configuración que se explicó anteriormente.

  34. Haga clic en Aceptar en la pantalla de WebApiToWebApi – Propiedades de API web 2 y, a continuación, en la pantalla Propiedades de WebApiToWebApi.

Configuración del código

En esta sección se muestra cómo configurar una API web para llamar a otra API web.

  1. Descargue el ejemplo desde aquí.

  2. Abra el ejemplo con Visual Studio.

  3. Abra el archivo App.config. Modifique lo siguiente:

    • ida:Authority: escriba https://[su nombre de host de AD FS]/adfs/

    • ida:ClientId: escriba el valor del paso 3 de la sección anterior "Registro de la aplicación en AD FS".

    • ida:RedirectUri: escriba el valor del paso 3 de la sección anterior "Registro de la aplicación en AD FS".

    • todo:TodoListResourceId: escriba el valor de Identificador del paso 4 de la sección anterior "Registro de la aplicación en AD FS"

    • ida: todo:TodoListBaseAddress: escriba el valor de Identificador del paso 4 de la sección anterior "Registro de la aplicación en AD FS".

      Captura de pantalla del archivo App config, en el que se muestran los valores modificados.

  4. Abra el archivo Web.config en ToDoListService. Modifique lo siguiente:

    • ida:Audience: escriba el valor de Identificador de cliente de #12 en el Registro de aplicaciones en la sección anterior de AD FS.

    • ida:ClientId: escriba el valor de Identificador de cliente del paso 12 de la sección anterior "Registro de la aplicación en AD FS".

    • ida:ClientSecret: escriba secreto compartido copiado del paso 13 de la sección anterior "Registro de la aplicación en AD FS".

    • ida:RedirectUri: escriba el valor de URI de redirección del paso 12 de la sección anterior "Registro de la aplicación en AD FS".

    • ida: AdfsMetadataEndpoint: escriba https://[nombre de host de AD FS]/federationmetadata/2007-06/federationmetadata.xml

    • ida:OBOWebAPIBase: escriba el valor de Identificador del paso 19 de la sección anterior "Registro de la aplicación en AD FS".

    • ida:Authority: escriba https://[su nombre de host de AD FS]/adfs

      Captura de pantalla del archivo Web config en ToDoListService que muestra los valores modificados.

  5. Abra el archivo Web.config en WebAPIOBO. Modifique lo siguiente:

    • ida: AdfsMetadataEndpoint: escriba https://[nombre de host de AD FS]/federationmetadata/2007-06/federationmetadata.xml

    • ida:Audience: escriba el valor de Identificador de cliente de #12 en el Registro de aplicaciones en la sección anterior de AD FS.

      Captura de pantalla del archivo Web config en WebAPIOBO que muestra los valores modificados.

Prueba del ejemplo

En esta sección, se muestra cómo probar el ejemplo configurado anteriormente.

Una vez que haya realizado los cambios en el código, vuelva a compilar la solución.

  1. En Visual Studio, haga clic con el botón derecho en la solución y seleccione Establecer proyectos de inicio....

    Captura de pantalla de la lista que aparece al hacer clic con el botón derecho en la solución con la opción Configurar proyectos de inicio resaltada.

  2. En las páginas Propiedades, asegúrese de que Acción está establecida en Inicio para cada uno de los proyectos, excepto TodoListSPA.

    Captura de pantalla del cuadro de diálogo Páginas de propiedades de la solución que muestra la opción Varios proyectos de inicio seleccionada y todas las acciones de los proyectos establecidas en Inicio.

  3. En la parte superior de Visual Studio, haga clic en la flecha verde.

    Captura de pantalla de la interfaz de usuario de Visual Studio con la opción Inicio resaltada.

  4. En la pantalla principal de la aplicación nativa, haga clic en Iniciar sesión.

    Captura de pantalla del cuadro de diálogo ToDoListClient.

    Si no ve la pantalla de la aplicación nativa, busque y quite los archivos *msalcache.bin de la carpeta donde se guarda el repositorio del proyecto en el sistema.

  5. Se le redirigirá a la página de inicio de sesión de AD FS. Continúe e inicie sesión.

    Captura de pantalla de la página Iniciar sesión.

  6. Una vez que haya iniciado sesión, escriba el texto Llamar a Web Api to Web Api en Crear un elemento To Do. Haga clic en Agregar elemento. Esto llamará a la API web (Servicio To Do List) que, a continuación, llamará a API web 2 (WebAPIOBO) y agregará el elemento en la memoria caché.

    Captura de pantalla del cuadro de diálogo ToDoListClient con el nuevo elemento ToDo rellenando la sección de Elementos ToDo.

Pasos siguientes

Flujos de AD FS OpenID Connect/OAuth y escenarios de aplicación