Las claves API nos permiten integrar Discourse con otros sistemas o automatizar diversas acciones. Sin embargo, gran poder conlleva gran responsabilidad. Si un actor malintencionado tiene acceso a una clave API, podría acceder a datos sensibles o realizar cambios en tu sitio. Para mitigar esto y añadir una capa adicional de seguridad, ahora puedes limitar lo que una clave API puede hacer mediante ámbitos (scopes).
Ámbitos y parámetros permitidos
Al crear una nueva clave API, puedes seleccionar los ámbitos que deseas. Si pasas el cursor sobre el icono , verás una breve descripción de su función. El botón te mostrará las URLs asociadas a ese ámbito.
Opcionalmente, también puedes especificar qué parámetros se aceptan. Utiliza comas para separar múltiples valores.
Migración de claves existentes
Cuando se agregó esta funcionalidad, las claves existentes se convirtieron en claves “globales”. Para migrarlas a ámbitos, deberás revocarlas y crear nuevas.
Agregación de ámbitos personalizados
Los complementos pueden agregar ámbitos personalizados llamando al método add_api_key_scope:
resource es un símbolo utilizado para agrupar ámbitos relacionados, mientras que action es un hash con los siguientes atributos:
actions: Una lista que contiene las acciones del controlador permitidas. El formato es nombre_controlador#nombre_metodo.
methods: Una lista de métodos HTTP permitidos (por ejemplo, %i[get]). Utiliza esto en lugar de actions para coincidir por método HTTP en lugar de por acción del controlador.
params: Una lista que contiene los nombres de los parámetros permitidos.
aliases: Un hash que contiene un nombre alternativo para un parámetro permitido.
Si deseas saber cómo se definen los ámbitos base, consulta:
Tengo permisos de lectura y read_list sobre temas para la clave de API. Por ejemplo, /top.json funciona con la misma clave. El endpoint funciona cuando uso una ‘Global Key’.
Me gustaría poner la clave de API en mi cliente para leer la lista de categorías y temas, ¡así que es importante tener una clave de solo lectura!
Desafortunadamente, solo incluimos un puñado de ámbitos de forma predeterminada debido al gran número de puntos de acceso disponibles. Es posible que agreguemos nuevos en el futuro, pero mientras tanto, deberás ampliarlos para adaptarlos a tus necesidades.
Si utilizas una clave de API con ámbito limitado, la llamada a puntos de acceso que no estén incluidos en los ámbitos que elegiste no funcionará. Puedes hacer clic en el botón para ver qué URL están aceptadas.
Esto solo funciona para sitios públicos. Además, no verás cosas como categorías privadas a menos que hayas iniciado sesión y tengas los permisos suficientes.
¿Están considerando sugerencias para ámbitos adicionales?
Una cosa que me gustaría hacer con la API de nuestro sitio sería permitir que otro sitio verifique si un usuario existe con una dirección de correo electrónico y, de ser así, agregarlo a un grupo. Confío en el sitio (es otro sitio dentro de nuestra organización matriz), pero si fuera una opción, parece sensato restringir las opciones de acceso solo a lo necesario.