Compartir por


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 para 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 simple de resource.operation.constraint. Las dos operaciones principales son Read y ReadWrite (que incluye update y delete).

El elemento de restricción afecta al grado de acceso que la aplicación tiene dentro del directorio. Microsoft Graph admite estas restricciones:

  • Todo concede permiso para que tu aplicación lleve a cabo operaciones en todos los recursos de un tipo especificado dentro de un directorio.
  • Compartido otorga permiso a su aplicación para realizar operaciones sobre 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 el objeto de usuario en Microsoft Graph para ver cómo los diseñadores de API de Microsoft habilitaron el acceso y las operaciones específicas en recursos determinados:

Permiso Mostrar cadena Descripción
User.Read Inicio de sesión y lectura del perfil de usuario Permite a los usuarios iniciar sesión en la aplicación y permite a la aplicación leer el perfil de los usuarios que han iniciado sesión. También permite a la aplicación leer la información básica de la empresa de los usuarios que han iniciado sesión.
User.ReadWrite Acceso al perfil del usuario para la lectura y la escritura Permite que la aplicación lea el perfil completo del usuario que ha iniciado sesión. También permite a la aplicación actualizar 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 el 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 actor malicioso no puede poner en peligro la aplicación y usarla para modificar 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 a la aplicación ver la información básica del objeto Organizations en Microsoft Graph.

Echemos un vistazo a otro permiso:

Permiso Mostrar cadena Descripción
User.ReadBasic.All Leer perfiles básicos de todos los usuarios Permite a la aplicación leer un conjunto básico de propiedades del perfil de otros usuarios de su organización en nombre del usuario que inició la sesión. Incluye el nombre para mostrar, el nombre y apellido, la dirección de correo electrónico, las extensiones abiertas y la foto. Permite que la aplicación lea el perfil completo del usuario que ha iniciado sesión.

El rango de operación que User.ReadBasic.All comienza con todo lo que User.Read hace. Además, puede acceder al nombre para mostrar, el nombre y apellido, la dirección de correo electrónico, la foto y las extensiones disponibles de otros usuarios de la organización. La gama específica de operaciones permite a las aplicaciones tener una interfaz de usuario de selector de personas agradable y es un ejemplo de los diseñadores de API que usan un permiso para 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 las propiedades del perfil, los informes y los administradores de otros usuarios de su organización, en nombre del usuario que ha iniciado sesión.
User.ReadWrite.All Leer los perfiles completos de todos los usuarios y escribir en ellos Permite que la aplicación lea y escriba el conjunto completo de las propiedades del perfil, los informes y los 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 a una aplicación seguir el principio de confianza cero con privilegios mínimos.

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 organizativa del inquilino. Si un actor malicioso accediera a esta información, podría lanzar un ataque de phishing dirigido en el que el correo electrónico de phishing proviniera del jefe de una persona o del jefe de su jefe.

User.ReadWrite.All es un potente rango de operación. Una aplicación con este permiso puede actualizar o incluso eliminar todos los usuarios del inquilino. Como permiso delegado, cuando un usuario está delante de la aplicación, la aplicación solo puede hacer lo que el usuario actual puede 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. Cuando decida conceder o denegar este permiso, evalúe la aplicación teniendo en cuenta un usuario administrador de inquilinos.

Dado el poder de User.Read.All y User.ReadWrite.All, los diseñadores de la API de Microsoft Graph designaron estos permisos como requisitos que requieren el consentimiento del administrador. Vamos a agregar una columna Admin? a nuestra tabla de permisos para indicar cuándo el permiso requiere consentimiento del administrador:

Permiso Mostrar cadena Descripción ¿Administrador?
User.Read Inicio de sesión y lectura del perfil de usuario Permite a los usuarios iniciar sesión en la aplicación y permite a la aplicación leer el perfil de los usuarios que han iniciado sesión. También permite a la aplicación leer la información básica de la empresa de los usuarios que han iniciado sesión. No
User.ReadWrite Acceso al perfil del usuario para la lectura y la escritura Permite que la aplicación lea el perfil completo del usuario que ha iniciado sesión. También permite a la aplicación actualizar la información del perfil del usuario que ha iniciado sesión en su nombre. No
User.ReadBasic.All Leer perfiles básicos de todos los usuarios Permite a la aplicación leer un conjunto básico de propiedades del perfil de otros usuarios de su organización en nombre del usuario que inició la sesión. Incluye el nombre para mostrar, el nombre y apellido, la dirección de correo electrónico, las extensiones abiertas y la foto. Permite que la aplicación lea el perfil completo del usuario que ha iniciado sesión. No
User.Read.All Leer los perfiles completos de todos los usuarios Permite que la aplicación lea el conjunto completo de las propiedades del perfil, los informes y los administradores de otros usuarios de su organización, en nombre del usuario que ha iniciado sesión.
User.ReadWrite.All Leer los perfiles completos de todos los usuarios y escribir en ellos Permite que la aplicación lea y escriba el conjunto completo de las propiedades del perfil, los informes y los 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.

Como se demuestra en el artículo Solicitudes de permisos que requieren consentimiento administrativo, los administradores del arrendatario pueden anular los requisitos y designar cualquiera o todos los permisos de aplicación en su arrendatario como que requieren consentimiento del administrador. Diseñe la aplicación para controlar correctamente cuando no reciba 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