Compartir a través de


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.

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

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