As Chaves de API permitem integrar o Discourse com outros sistemas ou automatizar diversas ações. No entanto, grande poder exige grande responsabilidade. Se um agente malicioso tiver acesso a uma Chave de API, poderá acessar dados sensíveis ou fazer alterações no seu site. Para mitigar isso e adicionar uma camada extra de segurança, agora você pode limitar o que uma Chave de API pode fazer usando escopos.
Escopos e parâmetros permitidos
Ao criar uma nova Chave de API, você pode selecionar quais escopos deseja. Se passar o mouse sobre o ícone , verá uma breve descrição do que ele faz. O botão mostrará as URLs associadas a esse escopo.
Opcionalmente, você também pode especificar quais parâmetros são aceitos. Use vírgulas para separar múltiplos valores.
Migrando chaves existentes
Quando adicionamos esse recurso, as chaves existentes se tornaram chaves “globais”. Para migrá-las para escopos, você precisará revogá-las e criar novas.
Adicionando escopos personalizados
Plugins podem adicionar escopos personalizados chamando o método add_api_key_scope:
resource é um símbolo usado para agrupar escopos relacionados, enquanto action é um hash com os seguintes atributos:
actions: Uma lista contendo as ações de controlador permitidas. O formato é nome_do_controlador#nome_do_metodo.
methods: Uma lista de métodos HTTP permitidos (por exemplo, %i[get]). Use isso em vez de actions para corresponder pelo método HTTP em vez da ação do controlador.
params: Uma lista contendo os nomes dos parâmetros permitidos.
aliases: Um hash contendo um nome diferente para um parâmetro permitido.
Se quiser saber como os escopos básicos são definidos, veja:
Onde eu li que tenho permissões de leitura e read_list para tópicos na chave de API. Por exemplo, /top.json funciona com a mesma chave. O endpoint funciona quando uso uma ‘Chave Global’.
Gostaria de colocar a chave de API no meu cliente para ler a lista de categorias e tópicos, então é importante ter uma chave de somente leitura!
Infelizmente, devido ao grande número de endpoints disponíveis, incluímos apenas alguns escopos padrão. Podemos adicionar novos no futuro, mas, enquanto isso, você precisará estendê-los para atender às suas necessidades.
Se você usar uma Chave de API com escopo, chamar endpoints não incluídos nos escopos escolhidos não funcionará. Você pode clicar no botão para ver quais URLs são aceitos.
Isso só funciona para sites públicos. Além disso, você não verá coisas como categorias privadas, a menos que esteja logado e tenha permissões suficientes.
Vocês estão aceitando sugestões para escopos adicionais?
Uma coisa que eu gostaria de fazer usando a API do nosso site seria permitir que outro site verifique se um usuário existe com um endereço de e-mail e o adicione a um grupo, caso positivo. Confio no site (outro site dentro da nossa organização matriz), mas restringir as opções de acesso apenas ao necessário parece sensato, se for uma opção disponível.