Ejemplo de API protegida por el marco de consentimiento de identidad de Microsoft
Este artículo puede ayudarle, como desarrollador, a diseñar la estrategia de permisos de aplicación para proporcionar privilegios mínimos. Antes de continuar, consulte el artículo protección de API para obtener información sobre los procedimientos recomendados para el registro, los permisos y el acceso.
Echemos un vistazo a cómo una API protegida por la Plataforma de identidad de Microsoft usa el marco de consentimiento de identidad de Microsoft. Usamos Microsoft Graph API como ejemplo porque hace el uso más amplio del marco de consentimiento de la plataforma de identidad de Microsoft.
Convención de nomenclatura para nombres de permisos
El equipo de Microsoft Graph creó una convención de nomenclatura para los nombres de permisos a fin de facilitar la conexión del permiso al acceso de recursos que habilita el permiso. Los nombres de permisos de Microsoft Graph se adhieren a un patrón resource.operation.constraint simple. Las dos operaciones principales son Read y ReadWrite (que incluye update y delete).
El elemento constraint afecta al grado de acceso que la aplicación tiene dentro del directorio. Microsoft Graph admite estas restricciones:
- Todas conceden permiso para que la aplicación realice las operaciones en todos los recursos del tipo especificado en un directorio.
- El uso compartido concede permiso para que la aplicación realice las operaciones en los recursos que otros usuarios han compartido con el usuario que ha iniciado sesión.
- AppFolder concede permiso para que la aplicación lea y escriba archivos en una carpeta dedicada en OneDrive. Esta restricción solo se expone en el objeto Permisos de archivos y solo es válida para las cuentas de Microsoft.
- Si especifica Ninguna restricción, la aplicación solo puede realizar las operaciones en los recursos que posee el usuario que ha iniciado sesión.
Acceso y operaciones con recursos específicos
Echemos un vistazo a algunos permisos o ámbitos para que el objeto de usuario de Microsoft Graph vea cómo los diseñadores de API de Microsoft habilitaron el acceso y las operaciones específicas en recursos específicos:
Permiso | Mostrar cadena | Descripción |
---|---|---|
User.Read |
Inicio de sesión y lectura del perfil de usuario | Permite que los usuarios inicien sesión en la aplicación y que la aplicación lea el perfil de los usuarios conectados. También permite que la aplicación lea información básica de la empresa de los usuarios conectados. |
User.ReadWrite |
Acceso de lectura y escritura al perfil de usuario | Permite que la aplicación lea el perfil completo de los usuarios conectados. También permite que la aplicación actualice la información del perfil del usuario que ha iniciado sesión en su nombre. |
User.Read
y User.ReadWrite
existen (en lugar de un solo permiso como User.Access
, que no existe) para que las aplicaciones puedan seguir el principio de confianza cero de privilegios mínimos. Si el desarrollador no tiene un requisito y código para actualizar el perfil del usuario, la aplicación no solicita User.ReadWrite
. Por lo tanto, un atacante no puede poner en peligro la aplicación y usarla para cambiar los datos.
Observe que User.Read
no solo concede a la aplicación acceso al objeto de usuario. Cada permiso representa un intervalo específico de operaciones. Es importante que los desarrolladores y administradores lean la descripción del permiso para ver exactamente lo que habilita cualquier permiso específico. User.Read
, además de habilitar la lectura del perfil completo del usuario actual, permite que la aplicación vea la información básica del objeto Organizaciones en Microsoft Graph.
Echemos un vistazo a otro permiso:
Permiso | Mostrar cadena | Descripción |
---|---|---|
User.ReadBasic.All |
Leer los perfiles básicos de todos los usuarios | Permite que la aplicación lea un conjunto básico de propiedades de perfil de otros usuarios de su organización en nombre del usuario que ha iniciado sesión. Incluye el nombre para mostrar, el nombre y la familia, la dirección de correo electrónico, las extensiones abiertas y la foto. Permite que la aplicación lea el perfil completo de los usuarios conectados. |
Intervalo de operaciones que User.ReadBasic.All
comienza con todo lo que User.Read
hace. Además, puede acceder al nombre para mostrar, el nombre y el nombre de familia, la dirección de correo electrónico, la foto y las extensiones abiertas para otros usuarios de la organización. El intervalo específico de operaciones permite a las aplicaciones tener una interfaz de usuario de selector de usuarios agradable y es un ejemplo de los diseñadores de API que usan un permiso a fin de habilitar un intervalo específico de operaciones.
Echemos un vistazo a un par de permisos más en el objeto de usuario de Microsoft Graph:
Permiso | Mostrar cadena | Descripción |
---|---|---|
User.Read.All |
Leer los perfiles completos de todos los usuarios | Permite que la aplicación lea el conjunto completo de propiedades de perfil, informes y administradores de otros usuarios de su organización, en nombre del usuario que ha iniciado sesión. |
User.ReadWrite.All |
Lectura y escritura de los perfiles completos de todos los usuarios | Permite que la aplicación lea y escriba el conjunto completo de propiedades de perfil, informes y administradores de otros usuarios de su organización, en nombre del usuario que ha iniciado sesión. También permite que la aplicación cree y elimine usuarios y restablezca las contraseñas de usuario en nombre del usuario que ha iniciado sesión. |
Al igual que con User.Read
y User.ReadWrite
, User.Read.All
y User.ReadWrite.All
son permisos distintos que permiten que una aplicación siga el principio de privilegios mínimos de confianza cero.
User.Read.All
es interesante porque todos los usuarios de la organización tienen esta funcionalidad (por ejemplo, abrir Outlook, subir y bajar una cadena de informes). Como usuario individual, puede ver el perfil de usuario completo de todos los demás usuarios de su organización. Sin embargo, los diseñadores de Microsoft Graph API decidieron que solo los administradores deberían permitir que una aplicación realice la misma operación porque User.Read.All
incluye la jerarquía de la organización del inquilino. Si un actor malintencionado accediera a esta información, podría ejecutar un ataque de suplantación de identidad dirigido en el que el correo electrónico de suplantación de identidad provenga de un administrador de una persona o del administrador de su administrador.
User.ReadWrite.All
es un intervalo potente gama de operaciones. Una aplicación que tenga concedido este permiso puede actualizar, o incluso eliminar, todos los usuarios del inquilino. Como permiso delegado, cuando un usuario está delante de la aplicación, esta solo puede hacer lo que el usuario actual pueda hacer. Los usuarios normales no pueden actualizar ni eliminar otros usuarios, independientemente de los permisos de la aplicación. Sin embargo, cuando un administrador de inquilinos usa la aplicación, puede realizar estas operaciones. Al decidir conceder o denegar este permiso, debe evaluar la aplicación teniendo en cuenta un usuario administrador de inquilinos.
Permisos que requieren consentimiento del administrador
Dado el poder de User.Read.All
y User.ReadWrite.All
, los diseñadores de Microsoft Graph API designaron estos permisos como requisito de consentimiento del administrador. ¿Vamos a agregar una columna ¿Administrador? a nuestra tabla de permisos para indicar cuándo el permiso requiere el consentimiento del administrador:
Permiso | Mostrar cadena | Descripción | ¿Administrador? |
---|---|---|---|
User.Read |
Inicio de sesión y lectura del perfil de usuario | Permite que los usuarios inicien sesión en la aplicación y que la aplicación lea el perfil de los usuarios conectados. También permite que la aplicación lea información básica de la empresa de los usuarios conectados. | No |
User.ReadWrite |
Acceso de lectura y escritura al perfil de usuario | Permite que la aplicación lea el perfil completo de los usuarios conectados. También permite que la aplicación actualice la información del perfil del usuario que ha iniciado sesión en su nombre. | No |
User.ReadBasic.All |
Leer los perfiles básicos de todos los usuarios | Permite que la aplicación lea un conjunto básico de propiedades de perfil de otros usuarios de su organización en nombre del usuario que ha iniciado sesión. Incluye el nombre para mostrar, el nombre y la familia, la dirección de correo electrónico, las extensiones abiertas y la foto. Permite que la aplicación lea el perfil completo de los usuarios conectados. | No |
User.Read.All |
Leer los perfiles completos de todos los usuarios | Permite que la aplicación lea el conjunto completo de propiedades de perfil, informes y administradores de otros usuarios de su organización, en nombre del usuario que ha iniciado sesión. | Sí |
User.ReadWrite.All |
Lectura y escritura de los perfiles completos de todos los usuarios | Permite que la aplicación lea y escriba el conjunto completo de propiedades de perfil, informes y administradores de otros usuarios de su organización, en nombre del usuario que ha iniciado sesión. También permite que la aplicación cree y elimine usuarios y restablezca las contraseñas de usuario en nombre del usuario que ha iniciado sesión. | Sí |
Como se muestra en el artículo Solicitud de permisos que requieren consentimiento administrativo, los administradores de inquilinos pueden anular los requisitos y designar cualquiera o todos los permisos de aplicación en su inquilino, ya que requieren consentimiento del administrador. Es aconsejable diseñar la aplicación para controlar correctamente cuándo no recibe un token de la solicitud. La falta de consentimiento es una de las muchas razones por las que es posible que la aplicación no reciba un token.
Pasos siguientes
- Llamar a una API desde otra API le ayuda a garantizar la confianza cero cuando tiene una API que necesita llamar a otra API y desarrollar de forma segura la aplicación cuando está trabajando en nombre de un usuario.
- Adquirir autorización para acceder a los recursos le ayuda a comprender cómo garantizar mejor Confianza cero al adquirir permisos de acceso a recursos para la aplicación.
- Personalizar tokens describe la información que puede recibir en tokens de Microsoft Entra. Explica cómo personalizar tokens para mejorar la flexibilidad y el control, al tiempo que aumenta la seguridad de confianza cero de la aplicación con privilegios mínimos.
- Configurar notificaciones de grupo y roles de aplicación en tokens muestra cómo configurar las aplicaciones con definiciones de roles de aplicación y asignar grupos de seguridad a roles de aplicación. Estos métodos ayudan a mejorar la flexibilidad y el control, al tiempo que aumentan la seguridad de confianza cero de la aplicación con privilegios mínimos.
- Los permisos de solicitud que requieren consentimiento administrativo describen la experiencia de permisos y consentimiento cuando los permisos de aplicación requieren consentimiento administrativo.
- En Inicio rápido: Protección de una API web con la Plataforma de identidad de Microsoft, descargue y ejecute un ejemplo de código que muestre cómo proteger una API web de ASP.NET.
- En Tutorial: Transformación y protección de una API con Azure API Management, obtenga información sobre cómo configurar directivas comunes a fin de ocultar la información de la pila de tecnología y las direcciones URL originales en el cuerpo de la respuesta HTTP de la API.
- Procedimientos recomendados de autorización le ayuda a implementar los mejores modelos de autorización, permisos y consentimiento para las aplicaciones.