Nesse caso, use um GitHub App
Se possível, crie um GitHub App em vez de um OAuth app. Em geral, os GitHub Apps são mais indicados que os OAuth apps. Os GitHub Apps usam permissões refinadas, dão ao usuário mais controle sobre quais repositórios o aplicativo pode acessar e usam tokens de curta duração. Essas propriedades podem aprimorar a segurança do aplicativo, limitando o dano possível decorrente do vazamento das credenciais.
Assim como os OAuth apps, os GitHub Apps ainda podem usar o OAuth 2.0 e gerar um tipo de token OAuth (chamado de token de acesso do usuário) para realizar ações em nome de um usuário. No entanto, os GitHub Apps também podem agir independentemente de um usuário.
Para saber mais sobre GitHub Apps, confira "Sobre a criação de Aplicativos do GitHub".
Para saber mais sobre a migração de um OAuth app existente para um GitHub App, confira "Migrar aplicativos OAuth para aplicativos GitHub".
Usar escopos mínimos
O OAuth app só deve solicitar os escopos necessários para que o aplicativo execute a funcionalidade pretendida. Se algum token do aplicativo for comprometido, isso limitará a quantidade de danos ocorridos. Para obter mais informações, confira "Autorizar aplicativos OAuth".
Proteger as credenciais do aplicativo
Com um segredo do cliente, o aplicativo pode autorizar o usuário e gerar tokens de acesso do usuário. Os tokens podem ser usados para fazer solicitações de API em nome de um usuário.
Você precisa armazenar o segredo do cliente do aplicativo e todos os tokens gerados com segurança. O mecanismo de armazenamento depende da arquitetura de integrações e da plataforma em que ele é executado. Em geral, você deve usar um mecanismo de armazenamento destinado a armazenar dados confidenciais na plataforma que você está usando.
Segredos do cliente
Se o seu aplicativo for um site ou aplicativo Web, armazene o segredo do cliente em um cofre de chaves, como o Azure Key Vault ou como uma variável de ambiente criptografada ou um segredo em seu servidor.
Se o seu aplicativo for um cliente nativo, um aplicativo do lado do cliente ou for executado em um dispositivo de usuário (em vez de ser executado em seus servidores), você não poderá proteger o segredo do cliente. Tenha cuidado se você planeja acessar os serviços com base em tokens gerados pelo aplicativo, pois qualquer pessoa pode acessar o segredo do cliente para gerar um token.
Tokens de acesso do usuário
Se o seu aplicativo for um site ou aplicativo Web, você deverá criptografar os tokens no back-end e garantir que haja segurança em torno dos sistemas que podem acessar os tokens. Armazene os tokens de atualização em um local separado dos tokens de acesso ativos.
Se o seu aplicativo for um cliente nativo, um aplicativo do lado do cliente ou executado em um dispositivo de usuário (em vez de ser executado em seus servidores), talvez você não consiga proteger tokens, bem como um aplicativo executado em seus servidores. Você deve armazenar tokens por meio do mecanismo recomendado para a plataforma do aplicativo e ter em mente que o mecanismo de armazenamento pode não ser totalmente seguro.
Use o tipo de token apropriado
Os OAuth apps podem gerar tokens de acesso do usuário para fazer solicitações de API não autenticadas. O aplicativo nunca deve usar uma senha de personal access token ou GitHub para autenticação.
Criar um plano para lidar com violações de segurança
Você deve ter um plano em vigor para que possa lidar com quaisquer violações de segurança em tempo hábil.
Caso o segredo do cliente do aplicativo seja comprometido, você precisará gerar um novo segredo, atualizar o aplicativo para usá-lo e excluir o segredo antigo.
Caso esses tokens de acesso do usuário sejam comprometidos, você deverá revogá-los imediatamente. Para obter mais informações, confira "Pontos de extremidade da API REST para autorizações de OAuth".
Verifique o acesso de um usuário às suas organizações
Seu aplicativo OAuth pode ser acessado por usuários fora de sua organização ou empresa. Se você pretende que um aplicativo seja usado apenas por membros de sua organização ou empresa, verifique o status de associação do usuário quando ele entrar em seu aplicativo.
Para localizar a lista de organizações das quais um usuário é membro, você pode usar o ponto de extremidade "Listar organizações para o usuário autenticado". Em seguida, você pode validar essa lista em relação a uma lista de organizações aprovadas para seu aplicativo. Para obter mais informações, confira "Pontos de extremidade de API REST para organizações".
Realizar verificações de vulnerabilidade regulares
Você deve realizar verificações regulares de vulnerabilidade do aplicativo. Por exemplo, você pode configurar a verificação de código e a verificação de segredo no repositório que hospeda o código do aplicativo. Para obter mais informações, confira "Sobre a varredura de código" e "Sobre a verificação de segredo."
Escolher um ambiente apropriado
Se o aplicativo for executado em um servidor, verifique se o ambiente do servidor é seguro e se ele pode lidar com o volume de tráfego esperado para seu aplicativo.
Usar serviços de maneira segura
Se o aplicativo usar serviços de terceiros, isso deverá ocorrer de maneira segura:
- todos os serviços usados pelo aplicativo devem ter um logon exclusivo e uma senha.
- Os aplicativos não devem compartilhar contas de serviço como, por exemplo, e-mail ou serviços de banco de dados para gerenciar seu serviço de SaaS.
- Somente os funcionários com funções administrativas devem ter acesso de administrador à infraestrutura que hospeda o aplicativo.
Adicionar log e monitoramento
Considere adicionar funcionalidades de log e monitoramento no aplicativo. Um log de segurança pode incluir:
- Eventos de autenticação e autorização
- Alterações na configuração do serviço
- Leitura e gravação de objetos
- Alterações de permissão de usuário e grupo
- Elevação do papel para administrador
Os logs devem usar carimbos de data/hora consistentes para cada evento e registrar usuários, endereços IP ou nomes de host de todos os eventos registrados.
Habilitar a exclusão de dados
Se o aplicativo estiver disponível para outros usuários, ofereça aos usuários uma forma de excluir os dados. Os usuários não devem precisar enviar um email ou chamar uma pessoa de suporte para excluir os dados.