Control de acceso

Con IBM Cloud® App ID, puede definir qué usuarios y aplicaciones pueden acceder a características específicas o realizar acciones específicas en sus apps. Para controlar el acceso, puede crear ámbitos y agruparlos en un rol. A continuación, asigne el rol a uno o más de los usuarios y aplicaciones de la app.

Un ámbito es una acción de tiempo de ejecución en la aplicación que registra con App ID para crear un permiso de acceso. Un rol es una recopilación de ámbitos que asigna permisos variables a distintos tipos de usuarios y aplicaciones de la app. Por ejemplo, si su empresa utiliza desarrolladores, podrían crear un rol que les permita leer y escribir en el código. Si utiliza auditores, podría tener un rol de solo visualización, tal como se muestra en la siguiente imagen.

Diagrama que muestra el flujo de trabajo de control de acceso en cuatro pasos de App ID: registrar acciones en tiempo de ejecución como ámbitos, compilar ámbitos en funciones, asignar funciones a usuarios o aplicaciones y verificar ámbitos en tokens de acceso en tiempo de ejecución
Cómo funciona el control de acceso App ID

  1. Registre las acciones de tiempo de ejecución que se pueden producir en la aplicación con App ID.
  2. Compile los ámbitos en grupos para formar roles.
  3. Controle los permisos de acceso mediante la asignación de roles a los usuarios o aplicaciones.
  4. Configure la aplicación para verificar los ámbitos que se devuelven en la señal de acceso de los usuarios en tiempo de ejecución (o en la señal de aplicaciones si fluyen las credenciales del cliente).

Para obtener más información sobre las aplicaciones, consulte Autorización e identidad de la aplicación.

Antes de empezar

  • Debe tener una aplicación.
  • Asegúrese de que comprende cómo puede afectar a su aplicación cada tipo de rol y ámbito. Como está otorgando acceso, querrá estar seguro de que se lo está otorgando solo a las personas que lo necesitan.
  • Tenga en cuenta los límites que están establecidos.

Creación de ámbitos en la consola

Un ámbito es una acción de tiempo de ejecución en la aplicación que pueden realizar los usuarios a los que se les otorgan los permisos necesarios para completarlas. Los ámbitos se crean cuando se registra la aplicación con App ID. Si la app ya está registrada, puede editarla para que incluya ámbitos.

Los valores de los nombres de ámbito deben cumplir los siguientes requisitos:

  • Ser alfanuméricos
  • Estar en minúsculas
  • No empezar por appid ni openid
  • No contener caracteres especiales que no sean puntos (.) o guiones bajos (_)
  • Tener menos de 50 caracteres.

Para crear un ámbito, puede utilizar la interfaz de usuario de App ID.

  1. Vaya a Aplicaciones en el panel de control de App ID.
  2. Pulse Añadir aplicación para abrir la pantalla de configuración. Si ya tiene credenciales y quiere utilizarlas, pulse Editar desde el menú Acciones en la fila que desee actualizar.
  3. Asigne un nombre a la app y seleccione el tipo de aplicación que tiene.
  4. Especifique un valor para el ámbito personalizado y pulse el símbolo más (+). Un valor de ámbito de ejemplo puede ser read o write.
  5. Repita el paso anterior hasta que añada todos los ámbitos a la aplicación.
  6. Pulse Guardar.

Creación de ámbitos con la API

Un ámbito es una acción de tiempo de ejecución en la aplicación que pueden realizar los usuarios a los que se les otorgan los permisos necesarios para completarlas. Los ámbitos se crean cuando se registra la aplicación con App ID. Si la app ya está registrada, puede editarla para que incluya ámbitos.

Los valores de los nombres de ámbito deben cumplir los siguientes requisitos:

  • Ser alfanuméricos
  • Estar en minúsculas
  • No empezar por appid ni openid
  • No contener caracteres especiales que no sean puntos (.) o guiones bajos (_)
  • Tener menos de 50 caracteres.

Para crear un ámbito, puede utilizar la interfaz de usuario de App ID.

  1. Cree los ámbitos realizando la siguiente solicitud al punto final /scopes.

    curl -X PUT "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications/<clientID>/scopes"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d "{\ "scopes":\ [\ <scopesObject>}" ]}"
    
    Variable Descripción
    region La región en la que se ha suministrado la instancia de App ID. Obtenga más información sobre las regiones disponibles.
    tenantID El identificador exclusivo de la instancia de App ID. Puede encontrar este valor en las credenciales de la app, ya que aparecen listadas en el separador Aplicaciones del panel de control del servicio.
    clientID El identificador exclusivo de la aplicación. Puede encontrar este valor en las credenciales de la app, ya que aparecen listadas en las Aplicaciones en el panel de control del servicio.
    scopesObject Un objeto JSON de todos los ámbitos que desea crear para la aplicación.
    {: caption="Variables necesarias para llamar al punto final /scopes " caption-side="top"}
  2. Opcional: confirme que se han creado los ámbitos.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications/<clientID>/scopes"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    

Creación de roles en la consola

Un rol es un grupo de ámbitos que se aplican al mismo tipo de usuario. Por ejemplo, si crea un rol de administrador, la sección de ámbitos puede permitir que dicho rol realice acciones de lectura, escritura o creación. Pero, si crea otro rol que se llama viewer, los usuarios a los que se les asigna ese rol tienen acceso de sólo lectura. Para crear un rol, puede utilizar la interfaz de usuario de App ID.

  1. Vaya a Perfiles y roles > Roles en el panel de control de App ID.

  2. Pulse Crear rol para abrir la pantalla de configuración.

  3. Proporcione un nombre y una descripción para el rol.

  4. Utilizando los ámbitos que ha creado en la sección anterior, asigne los ámbitos a un rol utilizando el siguiente formato. Pulse el símbolo + para añadir el ámbito.

    <appName>/<scope>
    

    Si solo tiene una aplicación, no es necesario que especifique el nombre de la app. Puede añadir el ámbito por sí mismo.

  5. Repita el paso anterior para añadir más ámbitos.

  6. Pulse Guardar.

Creación de roles con la API

Un rol es un grupo de ámbitos que se aplican al mismo tipo de usuario. Por ejemplo, si crea un rol de administrador, la sección de ámbitos puede permitir que dicho rol realice acciones de lectura, escritura o creación. Pero, si crea otro rol que se llama viewer, los usuarios a los que se les asigna ese rol tendrían acceso de sólo lectura. Para crear un rol, puede utilizar las API de App ID.

  1. Realice una solicitud al punto final /roles para crear el rol.

    curl -X POST "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d { \"name\": \"<roleName>\", \"description\": \"<roleDescription>\", \"access\": [ { \"application_id\": \"<applicationID>\", \"scopes\": [ \"<scopes>" ] } ]}"
    
    Variable Descripción
    region La región en la que se ha suministrado la instancia de App ID. Obtenga más información sobre las regiones disponibles.
    tenantID El identificador exclusivo de la instancia de App ID. Puede encontrar este valor en las credenciales de la app, ya que aparecen listadas en el separador Aplicaciones del panel de control del servicio.
    clientID El identificador exclusivo de la aplicación. Puede encontrar este valor en las credenciales de la app, ya que aparecen listadas en Aplicaciones.
    roleName El nombre que desea asignar al rol.
    roleDescription Una frase corta que describe lo que hará el rol.
    applicationID El identificador exclusivo de la aplicación. Puede encontrar este valor en las credenciales de la app, ya que aparecen listadas en Aplicaciones.
    scopes Un objeto JSON de todos los ámbitos que desea aplicar a un rol.
    {: caption="Variables necesarias para llamar al punto final /scopes " caption-side="top"}
  2. Opcional: confirme que se han creado los roles.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles -H "accept: application/json"
    

    La respuesta tiene un aspecto similar al siguiente:

    {
       "roles": [
       {
          "id": "12345678-1234-1234-1234-123456789012",
          "name": "admin",
          "description": "Can perform administrative tasks.",
          "access": [
             {
             "application_id": "de33d272-f8a7-4406-8fe8-ab28fd457be5",
             "scopes": [
                "create",
                "update",
                "write",
                "read"
             ]
             }
          ]
       }
       {
          "id": "123454231-1234-1234-3334-12345687012",
          "name": "developer",
          "description": "Can perform administrative tasks.",
          "access": [
             {
             "application_id": "de33d272-f8a7-4406-8fe8-ab28fd457be5",
             "scopes": [
                "write",
                "read"
             ]
             }
          ]
       }
       ]
    }
    

Asignación de funciones a los usuarios en la consola

Después de crear roles, puede asignarlos a su perfil de usuario. También puede asignar roles al crear un usuario futuro.

  1. Vaya a Perfiles y roles > Perfiles de usuario en el panel de control de App ID.
  2. Desde el menú Acciones en la fila del usuario específico al que va a asignar un rol, pulse Asignar rol.
  3. Seleccione el rol o los roles que desea añadir en la lista de roles disponibles.
  4. Opcional: si no ve el rol que está buscando, pulse Crear rol y proporcione la información para añadir otra opción.
  5. Pulse Guardar.

Asignación de roles a usuarios con la API

Después de crear roles, puede asignarlos a su perfil de usuario. También puede asignar roles al crear un usuario futuro.

  1. Obtenga el ID de usuario buscando a los usuarios de App ID con una consulta de identificación, como una dirección de correo electrónico.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/Users?query=<identifyingSearchQuery>" \
    -H "accept: application/json" \
    -H "authorization: Bearer <token>"
    

    Ejemplo:

    curl -X GET https://us-south.appid.cloud.ibm.com/management/v4/e19a2778-3262-4986-8875-8khjafsdkhjsdafkjh/cloud_directory/Users?query=example@domain.com
    -H "accept: application/json"
    -H "authorization: Bearer eyJraWQiOiIyMDE3MTEyOSIsImFsZ...."
    
  2. Opcional: obtenga el ID de rol o el nombre de rol. Si ya conoce el ID o el nombre del rol, vaya al paso siguiente.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles" \
    -H "accept: application/json" \
    -H "authorization: Bearer <token>"
    
  3. Realice una solicitud al punto final /roles que contiene un objeto JSON de los roles que desea asignar.

    curl -X PUT "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/users/<userID>/roles"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d "{ \"roles\": { \"ids\": [ \"<roleIDs>\" ] }}"
    -H "authorization: Bearer <token>"
    

Para eliminar un rol de un usuario, realice de nuevo la solicitud PUT, pero elimine el ID de rol.

Adición de roles de usuario a señales

De forma predeterminada, los roles no se devuelven en una señal de usuario. Se recomienda que las decisiones de tiempo de ejecución se configuren en base a los ámbitos. Sin embargo, si desea utilizar roles, puede correlacionarlos con las señales utilizando la correlación de reclamaciones personalizadas.

Al autenticarse, asegúrese de utilizar username : client ID y password : secret para la aplicación y el usuario para los que ha configurado los controles.

Asignar roles a una aplicación

Después de crear roles, puede asignarlos a las aplicaciones utilizando las API de App ID.

Los roles de aplicación sólo son válidos en el flujo de credenciales de cliente.

  1. Obtenga el ID de cliente de la aplicación consultando la lista de aplicaciones. También puede obtener este valor en el separador Aplicaciones de la interfaz de usuario de App ID.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications" \
    -H "accept: application/json" \
    -H "authorization: Bearer <token>"
    

    Ejemplo:

    curl -X GET https://us-south.appid.cloud.ibm.com/management/v4/e19a2778-3262-4986-8875-8khjafsdkhjsdafkjh/applications
    -H "accept: application/json"
    -H "authorization: Bearer eyJraWQiOiIyMDE3MTEyOSIsImFsZ...."
    
  2. Obtenga el ID de rol.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles" \
    -H "accept: application/json" \
    -H "authorization: Bearer <token>"
    
  3. Realice una solicitud al punto final /roles que contiene un objeto JSON de los roles que desea asignar. Esta solicitud sustituye los roles actuales por los ID de rol proporcionados. Asegúrese de asignar los roles correctos.

    curl -X PUT "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications/<clientID>/roles"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d "{ \"roles\": { \"ids\": [ \"<roleIDs>\" ] }}"
    -H "authorization: Bearer <token>"
    

Para eliminar un rol de un usuario, realice de nuevo la solicitud PUT, pero elimine el ID de rol.

Control del acceso en tiempo de ejecución

Cuando un usuario intenta acceder a uno de los recursos protegidos, App ID crea y devuelve las señales. Los ámbitos a los un usuario o una aplicación está asignado se devuelven en la señal de acceso. Puede utilizar la señal de acceso para tomar decisiones en tiempo de ejecución. En función de la estrategia que esté utilizando para proteger las aplicaciones, la forma de verificar los ámbitos puede diferir.

Cuando se utiliza una estrategia de app web

Puede utilizar una estrategia de app web para comprobar si una solicitud contiene algún ámbito utilizando el método hasScope. Cuando un usuario con un rol asignado inicia sesión, se le otorga acceso mediante una señal App ID que contiene todos los ámbitos definidos en el rol.Por ejemplo, si está trabajando con el SDK de Node.js, el fragmento de código se parecerá a lo siguiente:

app.get("/protected", passport.authenticate(WebAppStrategy.STRATEGY_NAME), function(req, res){
    if(WebAppStrategy.hasScope(req, "read write")){
              res.json(req.user);
    }
    else {
        res.send("insufficient scopes");
    }
});

Cuando se utiliza una estrategia de API

Puede definir los ámbitos que son necesarios para acceder a un punto final específico añadiendo una variable de ámbito al código de estrategia de API. Por ejemplo, si tiene una aplicación que está escrita en Node.js y está trabajando con el SDK de Node.js, el fragmento de código puede tener un aspecto similar al siguiente.

app.get("/api/protected",
        passport.authenticate(APIStrategy.STRATEGY_NAME, {
                audience: "myApp",
                scope: "read write update"
        }),
        function(req, res) {
                res.send("Hello from protected resource");
        }
);
Comprender las variables utilizadas con la estrategia API
Variable Descripción
scope Los ámbitos necesarios, separados por un espacio.
audience El ID del cliente de la aplicación.

Eliminación de acceso

Puede suprimir cualquier ámbito o rol que ya no sea necesario.

Borrar ámbitos en la consola

Si ya no necesita un ámbito, puede suprimirlo utilizando la interfaz de usuario de App ID.

Cuando suprime un ámbito, se elimina de todos los roles con los que está asociado.

Puede utilizar el panel de control del servicio App ID para suprimir ámbitos.

  1. Vaya a Aplicaciones en el panel de control de App ID.
  2. Desde el menú Acciones en la fila de la aplicación para la cual desea editar los ámbitos, pulse Editar.
  3. Pulse X en el recuadro del ámbito que desea eliminar.
  4. Pulse Guardar.

Supresión de ámbitos con la API

Si ya no necesita un ámbito, puede suprimirlo utilizando la API de App ID. Para suprimir un ámbito, elimínelo del objeto JSON y realice una nueva solicitud PUT al punto final /scopes.

Cuando suprime un ámbito, se elimina de todos los roles con los que está asociado.

  1. Cambie o suprima un ámbito por la siguiente solicitud al punto final /scopes. Asegúrese de actualizar el objeto JSON de ámbitos para que solamente contenga los ámbitos que desea permitir.

    curl -X PUT "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications/<clientID>/scopes"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d "{\ "scopes":\ [\ <scopesObject>" ]}"
    

Eliminación de roles en la consola

Si ya no necesita un rol específico, puede suprimirlo utilizando la interfaz de usuario de App ID.

La supresión de un rol elimina el acceso de todos los usuarios y aplicaciones que están utilizando actualmente el rol.

  1. Vaya a Perfiles y roles > Roles en el panel de control del servicio.
  2. En la fila correspondiente al rol que desea suprimir, seleccione Suprimir desde el menú Acciones.
  3. Confirme que comprende que la supresión del rol afecta a todos los usuarios y aplicaciones que actualmente estén utilizando el rol.
  4. Pulse Suprimir.

Supresión de roles con la API

Si ya no necesita un rol específico, puede suprimirlo utilizando las API de App ID.

La supresión de un rol elimina el acceso de todos los usuarios y aplicaciones que están utilizando actualmente el rol.

  1. Obtenga el ID de rol o el nombre de rol. Si ya conoce el ID o el nombre del rol, vaya al paso siguiente.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles"
    -H "accept: application/json"
    
  2. Realice una solicitud al punto final /roles que contiene un objeto JSON de los roles que desea asignar.

    curl -X DELETE "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles/<roleID>"
    -H "accept: application/json"