Compartilhar via


Visão geral da autenticação ASP.NET Core

Por Mike Rousos

A autenticação é o processo de determinar a identidade de um usuário. Authorization é o processo de determinar se um usuário tem acesso a um recurso. Em ASP.NET Core, a autenticação é tratada pelo serviço de autenticação, IAuthenticationService, que é usado pela autenticação middleware. O serviço de autenticação usa manipuladores de autenticação registrados para realizar ações relacionadas à autenticação. Exemplos de ações relacionadas à autenticação incluem:

  • Autenticar um usuário.
  • Respondendo quando um usuário não autenticado tenta acessar um recurso restrito.

Os manipuladores de autenticação registrados e suas opções de configuração são chamados de "esquemas".

Os esquemas de autenticação são especificados registrando serviços de autenticação em :

  • Chamando um método de extensão específico do esquema após uma chamada para , como ou . Esses métodos de extensão usam para registrar esquemas com configurações apropriadas.
  • Menos comumente, chamando diretamente.

Por exemplo, o seguinte código registra serviços de autenticação e manipuladores para e esquemas de autenticação de portador JWT:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("CookieSettings", options));

O parâmetro é o nome do esquema a ser usado por padrão quando um esquema específico não é solicitado.

Se vários esquemas forem usados, políticas de autorização (ou atributos de autorização) poderão especificar o esquema de autenticação (ou esquemas) de que dependem para autenticar o usuário. No exemplo acima, o esquema de autenticação pode ser usado especificando seu nome ( por padrão, embora um nome diferente possa ser fornecido ao chamar ).

Em alguns casos, a chamada para é feita automaticamente por outros métodos de extensão. Por exemplo, ao usar ASP.NET Core Identity, AddAuthentication é chamado internamente.

O middleware de Autenticação é adicionado em chamando . Chamar registra o middleware que usa os esquemas de autenticação registrados anteriormente. Chame antes de qualquer middleware que dependa da autenticação de usuários.

Conceitos de autenticação

A autenticação é responsável por fornecer o autorização para tomar decisões de permissão. Há várias abordagens de esquema de autenticação para selecionar qual manipulador de autenticação é responsável por gerar o conjunto correto de declarações:

  • Esquema de autenticação
  • O esquema de autenticação padrão, discutido na próxima seção.
  • Definir diretamente.

Quando houver apenas um único esquema de autenticação registrado, ele se torna o esquema padrão. Se vários esquemas forem registrados e o esquema padrão não for especificado, um esquema deverá ser especificado no atributo de autorização, caso contrário, o seguinte erro será gerado:

InvalidOperationException: Nenhum authenticationScheme foi especificado, e nenhum DefaultAuthenticateScheme foi encontrado. Os esquemas padrão podem ser definidos usando AddAuthentication(string defaultScheme) ou AddAuthentication(ActionAuthenticationOptions configureOptions).

DefaultScheme

Quando houver apenas um único esquema de autenticação registrado, o esquema de autenticação única:

  • É usado automaticamente como o .
  • Elimina a necessidade de especificar o em ou .

Para desabilitar automaticamente o uso do esquema de autenticação única como o , chame .

Esquema de autenticação

O esquema de autenticação pode selecionar qual manipulador de autenticação é responsável por gerar o conjunto correto de declarações. Para obter mais informações, consulte Autorizar com um esquema específico.

Um esquema de autenticação é um nome que corresponde a:

  • Um manipulador de autenticação.
  • Opções para configurar essa instância específica do manipulador.

Os esquemas são úteis como um mecanismo para fazer referência à autenticação, ao desafio e à proibição de comportamentos do manipulador associado. Por exemplo, uma política de autorização pode usar nomes de esquema para especificar qual esquema de autenticação (ou esquemas) deve ser usado para autenticar o usuário. Ao configurar a autenticação, é comum especificar o esquema de autenticação padrão. O esquema padrão é usado, a menos que um recurso solicite um esquema específico. Também é possível:

  • Especificar diferentes esquemas padrão a serem usados para autenticar, desafiar e proibir ações.
  • Combinar vários esquemas em um usando esquemas de política.

Manipulador de autenticação

Um manipulador de autenticação:

  • É um tipo que implementa o comportamento de um esquema.
  • É derivado de ou .
  • Tem a principal responsabilidade de autenticar usuários.

Com base na configuração do esquema de autenticação e no contexto da solicitação de entrada, os manipuladores de autenticação:

  • Construa objetos que representem a identidade do usuário quando a autenticação for bem-sucedida.
  • Retornará "nenhum resultado" ou "falha" se a autenticação não for bem-sucedida.
  • Implemente métodos para desafiar e proibir ações quando os usuários tentarem acessar recursos.
    • Eles não têm autorização para acessar (proibido).
    • Quando eles não estão autenticados (desafio).

versus

é a classe para autenticação que requer uma etapa de autenticação remota. Quando a etapa de autenticação remota for concluída, o manipulador retornará ao definido pelo manipulador. O handler conclui a etapa de autenticação usando as informações passadas para o caminho de callback . OAuth 2.0 e OIDC ambos usam esse padrão. JWT e cookies não, pois podem usar diretamente o cabeçalho do portador e para autenticar. O provedor hospedado remotamente neste caso:

  • É o provedor de autenticação.
  • Exemplos incluem o Facebook, o Twitter, o Google, o Microsoft e qualquer outro provedor de OIDC que manipula a autenticação de usuários usando o mecanismo de manipuladores.

Autenticar

A ação de autenticação de um esquema de autenticação é responsável por construir a identidade do usuário com base no contexto de solicitação. Ela retorna um que indica se a autenticação foi bem-sucedida e, nesse caso, a identidade do usuário em um tíquete de autenticação. Consulte . Exemplos de autenticação incluem:

  • Um esquema de autenticação que constrói a identidade do usuário a partir de cookies.
  • Um esquema de portador JWT que desserializa e valida um token de portador JWT para construir a identidade do usuário.

Desafio

Um desafio de autenticação é invocado pela autorização quando um usuário não autenticado solicita um endpoint que requer autenticação. Um desafio de autenticação é emitido, por exemplo, quando um usuário anônimo solicita um recurso restrito ou segue um link de logon. A autorização invoca um desafio usando os esquemas de autenticação especificados ou o padrão se nenhum for especificado. Consulte . Exemplos de desafio de autenticação incluem:

  • Um esquema de autenticação que redireciona o usuário para uma página de logon.
  • Um esquema de portador JWT que retorna um resultado 401 com um cabeçalho .

Uma ação de desafio deve permitir que o usuário saiba qual mecanismo de autenticação usar para access o recurso solicitado.

Proibir

A ação de proibição de um esquema de autenticação é acionada pelo sistema de Autorização quando um usuário autenticado tenta acessar um recurso ao qual não tem permissão para acessar. Consulte . Exemplos de proibição de autenticação incluem:

  • Um esquema de autenticação cookie redirecionando o usuário para uma página indicando que o acesso foi proibido.
  • Um esquema de portador JWT que retorna um resultado 403.
  • Um esquema de autenticação personalizado redirecionando para uma página em que o usuário pode solicitar acesso para o recurso.

Uma ação de proibição pode informar ao usuário:

  • Estão autenticados.
  • Eles não estão autorizados a acessar o recurso solicitado.

Consulte os seguintes links para conhecer as diferenças entre desafio e proibição:

  • Desafiar e proibir usando um manipulador de recursos operacional.
  • Diferenças entre desafio e proibição.

Provedores de autenticação por locatário

ASP.NET Core não tem uma solução interna para autenticação multilocatário. Embora seja possível que os clientes escrevam um usando os recursos internos, recomendamos que os clientes considerem Orchard Core, ABP Framework ou Finbuckle.MultiTenant para autenticação multilocatário.

O Orchard Core é:

  • Uma estrutura de aplicativo de software livre, modular e multiuso criada com ASP.NET Core.
  • Um CMS (sistema de gerenciamento de conteúdo) criado com base nessa estrutura de aplicativo.

Consulte a origem Orchard Core para obter um exemplo de provedores de autenticação por locatário.

O ABP Framework dá suporte a vários padrões de arquitetura, incluindo modularidade, microsserviços, design controlado por domínio e multilocatário. Consulte o código-fonte do ABP Framework no GitHub.

Finbuckle.MultiTenant:

  • código aberto
  • Fornece resolução de inquilino
  • Leve
  • Fornece isolamento de dados
  • Configurar o comportamento do aplicativo de forma única para cada locatário

Recursos adicionais

Por Mike Rousos

A autenticação é o processo de determinar a identidade de um usuário. Authorization é o processo de determinar se um usuário tem acesso a um recurso. Em ASP.NET Core, a autenticação é tratada pelo serviço de autenticação, IAuthenticationService, que é usado pela autenticação middleware. O serviço de autenticação usa manipuladores de autenticação registrados para realizar ações relacionadas à autenticação. Exemplos de ações relacionadas à autenticação incluem:

  • Autenticar um usuário.
  • Respondendo quando um usuário não autenticado tenta acessar um recurso restrito.

Os manipuladores de autenticação registrados e suas opções de configuração são chamados de "esquemas".

Os esquemas de autenticação são especificados registrando serviços de autenticação em :

  • Chamando um método de extensão específico do esquema após uma chamada para , como ou . Esses métodos de extensão usam para registrar esquemas com configurações apropriadas.
  • Menos comumente, chamando diretamente.

Por exemplo, o seguinte código registra serviços de autenticação e manipuladores para e esquemas de autenticação de portador JWT:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("CookieSettings", options));

O parâmetro é o nome do esquema a ser usado por padrão quando um esquema específico não é solicitado.

Se vários esquemas forem usados, políticas de autorização (ou atributos de autorização) poderão especificar o esquema de autenticação (ou esquemas) de que dependem para autenticar o usuário. No exemplo acima, o esquema de autenticação pode ser usado especificando seu nome ( por padrão, embora um nome diferente possa ser fornecido ao chamar ).

Em alguns casos, a chamada para é feita automaticamente por outros métodos de extensão. Por exemplo, ao usar ASP.NET Core Identity, AddAuthentication é chamado internamente.

O middleware de Autenticação é adicionado em chamando . Chamar registra o middleware que usa os esquemas de autenticação registrados anteriormente. Chame antes de qualquer middleware que dependa da autenticação de usuários.

Conceitos de autenticação

A autenticação é responsável por fornecer o autorização para tomar decisões de permissão. Há várias abordagens de esquema de autenticação para selecionar qual manipulador de autenticação é responsável por gerar o conjunto correto de declarações:

  • Esquema de autenticação
  • O esquema de autenticação padrão, discutido na próxima seção.
  • Definir diretamente.

Não há investigação automática de esquemas. Se o esquema padrão não for especificado, o esquema deverá ser especificado no atributo de autorização, caso contrário, o seguinte erro será gerado:

InvalidOperationException: Nenhum authenticationScheme foi especificado, e nenhum DefaultAuthenticateScheme foi encontrado. Os esquemas padrão podem ser definidos usando AddAuthentication(string defaultScheme) ou AddAuthentication(ActionAuthenticationOptions configureOptions).

Esquema de autenticação

O esquema de autenticação pode selecionar qual manipulador de autenticação é responsável por gerar o conjunto correto de declarações. Para obter mais informações, consulte Autorizar com um esquema específico.

Um esquema de autenticação é um nome que corresponde a:

  • Um manipulador de autenticação.
  • Opções para configurar essa instância específica do manipulador.

Os esquemas são úteis como um mecanismo para fazer referência à autenticação, ao desafio e à proibição de comportamentos do manipulador associado. Por exemplo, uma política de autorização pode usar nomes de esquema para especificar qual esquema de autenticação (ou esquemas) deve ser usado para autenticar o usuário. Ao configurar a autenticação, é comum especificar o esquema de autenticação padrão. O esquema padrão é usado, a menos que um recurso solicite um esquema específico. Também é possível:

  • Especificar diferentes esquemas padrão a serem usados para autenticar, desafiar e proibir ações.
  • Combinar vários esquemas em um usando esquemas de política.

Manipulador de autenticação

Um manipulador de autenticação:

  • É um tipo que implementa o comportamento de um esquema.
  • É derivado de ou .
  • Tem a principal responsabilidade de autenticar usuários.

Com base na configuração do esquema de autenticação e no contexto da solicitação de entrada, os manipuladores de autenticação:

  • Construa objetos que representem a identidade do usuário quando a autenticação for bem-sucedida.
  • Retornará "nenhum resultado" ou "falha" se a autenticação não for bem-sucedida.
  • Tenha métodos para desafiar e proibir ações quando os usuários tentarem acessar recursos:
    • Eles não têm autorização para acessar (acesso proibido).
    • Quando eles não estão autenticados (desafio).

versus

é a classe para autenticação que requer uma etapa de autenticação remota. Quando a etapa de autenticação remota for concluída, o manipulador retornará ao definido pelo manipulador. O handler conclui a etapa de autenticação usando as informações passadas para o caminho de callback . OAuth 2.0 e OIDC ambos usam esse padrão. JWT e cookies não, pois podem usar diretamente o cabeçalho do portador e para autenticar. O provedor hospedado remotamente neste caso:

  • É o provedor de autenticação.
  • Exemplos incluem o Facebook, o Twitter, o Google, o Microsoft e qualquer outro provedor de OIDC que manipula a autenticação de usuários usando o mecanismo de manipuladores.

Autenticar

A ação de autenticação de um esquema de autenticação é responsável por construir a identidade do usuário com base no contexto de solicitação. Ela retorna um que indica se a autenticação foi bem-sucedida e, nesse caso, a identidade do usuário em um tíquete de autenticação. Consulte . Exemplos de autenticação incluem:

  • Um esquema de autenticação que constrói a identidade do usuário a partir de cookies.
  • Um esquema de portador JWT que desserializa e valida um token de portador JWT para construir a identidade do usuário.

Desafio

Um desafio de autenticação é invocado pela autorização quando um usuário não autenticado solicita um endpoint que requer autenticação. Um desafio de autenticação é emitido, por exemplo, quando um usuário anônimo solicita um recurso restrito ou segue um link de logon. A autorização invoca um desafio usando os esquemas de autenticação especificados ou o padrão se nenhum for especificado. Consulte . Exemplos de desafio de autenticação incluem:

  • Um esquema de autenticação que redireciona o usuário para uma página de logon.
  • Um esquema de portador JWT que retorna um resultado 401 com um cabeçalho .

Uma ação de desafio deve permitir que o usuário saiba qual mecanismo de autenticação usar para access o recurso solicitado.

Proibir

A ação de proibição de um esquema de autenticação é acionada pela função de Autorização quando um usuário autenticado tenta acessar um recurso que não tem permissão para acessar. Consulte . Exemplos de proibição de autenticação incluem:

  • Um esquema de autenticação cookie redirecionando o usuário para uma página indicando que o acesso foi proibido.
  • Um esquema de portador JWT que retorna um resultado 403.
  • Um esquema de autenticação personalizado redirecionando para uma página em que o usuário pode solicitar acesso ao recurso.

Uma ação de proibição pode informar ao usuário:

  • Estão autenticados.
  • Eles não têm permissão para acessar o recurso solicitado.

Consulte os seguintes links para conhecer as diferenças entre desafio e proibição:

  • Desafiar e proibir usando um manipulador de recursos operacional.
  • Diferenças entre desafio e proibição.

Provedores de autenticação por locatário

ASP.NET Core não tem uma solução interna para autenticação multilocatário. Embora os clientes possam criar um usando os recursos internos, recomendamos que considerem o Orchard Core ou o ABP Framework para autenticação multilocatária.

O Orchard Core é:

  • Uma estrutura de aplicativo de software livre, modular e multiuso criada com ASP.NET Core.
  • Um CMS (sistema de gerenciamento de conteúdo) criado com base nessa estrutura de aplicativo.

Consulte a origem Orchard Core para obter um exemplo de provedores de autenticação por locatário.

O ABP Framework dá suporte a vários padrões de arquitetura, incluindo modularidade, microsserviços, design controlado por domínio e multilocatário. Consulte o código-fonte do ABP Framework no GitHub.

Recursos adicionais

Por Mike Rousos

A autenticação é o processo de determinar a identidade de um usuário. Authorization é o processo de determinar se um usuário tem acesso a um recurso. Em ASP.NET Core, a autenticação é tratada pelo serviço de autenticação, IAuthenticationService, que é usado pela autenticação middleware. O serviço de autenticação usa manipuladores de autenticação registrados para realizar ações relacionadas à autenticação. Exemplos de ações relacionadas à autenticação incluem:

  • Autenticar um usuário.
  • Respondendo quando um usuário não autenticado tenta acessar um recurso restrito.

Os manipuladores de autenticação registrados e suas opções de configuração são chamados de "esquemas".

Os esquemas de autenticação são especificados registrando serviços de autenticação em :

  • Chamando um método de extensão específico do esquema após uma chamada para (como ou , por exemplo). Esses métodos de extensão usam para registrar esquemas com configurações apropriadas.
  • Menos comumente, chamando diretamente.

Por exemplo, o seguinte código registra serviços de autenticação e manipuladores para e esquemas de autenticação de portador JWT:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => Configuration.Bind("CookieSettings", options));

O parâmetro é o nome do esquema a ser usado por padrão quando um esquema específico não é solicitado.

Se vários esquemas forem usados, políticas de autorização (ou atributos de autorização) poderão especificar o esquema de autenticação (ou esquemas) de que dependem para autenticar o usuário. No exemplo acima, o esquema de autenticação pode ser usado especificando seu nome ( por padrão, embora um nome diferente possa ser fornecido ao chamar ).

Em alguns casos, a chamada para é feita automaticamente por outros métodos de extensão. Por exemplo, ao usar ASP.NET Core Identity, AddAuthentication é chamado internamente.

O middleware de Autenticação é adicionado em chamando . Chamar registra o middleware que usa os esquemas de autenticação registrados anteriormente. Chame antes de qualquer middleware que dependa da autenticação de usuários. Ao usar o roteamento de ponto de extremidade, a chamada para deve ir:

  • Depois de , para que as informações de rota fiquem disponíveis para decisões de autenticação.
  • Antes de , para que os usuários sejam autenticados antes de acessarem os endpoints.

Conceitos de autenticação

A autenticação é responsável por fornecer o autorização para tomar decisões de permissão. Há várias abordagens de esquema de autenticação para selecionar qual manipulador de autenticação é responsável por gerar o conjunto correto de declarações:

  • Esquema de autenticação
  • O esquema de autenticação padrão, discutido na próxima seção.
  • Definir diretamente.

Não há investigação automática de esquemas. Se o esquema padrão não for especificado, o esquema deverá ser especificado no atributo de autorização, caso contrário, o seguinte erro será gerado:

InvalidOperationException: Nenhum authenticationScheme foi especificado, e nenhum DefaultAuthenticateScheme foi encontrado. Os esquemas padrão podem ser definidos usando AddAuthentication(string defaultScheme) ou AddAuthentication(ActionAuthenticationOptions configureOptions).

Esquema de autenticação

O esquema de autenticação pode selecionar qual manipulador de autenticação é responsável por gerar o conjunto correto de declarações. Para obter mais informações, consulte Autorizar com um esquema específico.

Um esquema de autenticação é um nome que corresponde a:

  • Um manipulador de autenticação.
  • Opções para configurar essa instância específica do manipulador.

Os esquemas são úteis como um mecanismo para fazer referência à autenticação, ao desafio e à proibição de comportamentos do manipulador associado. Por exemplo, uma política de autorização pode usar nomes de esquema para especificar qual esquema de autenticação (ou esquemas) deve ser usado para autenticar o usuário. Ao configurar a autenticação, é comum especificar o esquema de autenticação padrão. O esquema padrão é usado, a menos que um recurso solicite um esquema específico. Também é possível:

  • Especificar diferentes esquemas padrão a serem usados para autenticar, desafiar e proibir ações.
  • Combinar vários esquemas em um usando esquemas de política.

Manipulador de autenticação

Um manipulador de autenticação:

  • É um tipo que implementa o comportamento de um esquema.
  • É derivado de ou .
  • Tem a principal responsabilidade de autenticar usuários.

Com base na configuração do esquema de autenticação e no contexto da solicitação de entrada, os manipuladores de autenticação:

  • Construa objetos que representem a identidade do usuário quando a autenticação for bem-sucedida.
  • Retornará "nenhum resultado" ou "falha" se a autenticação não for bem-sucedida.
  • Tenha métodos para desafiar e proibir ações quando os usuários tentarem acessar recursos:
    • Eles não têm autorização para acessar (acesso proibido).
    • Quando eles não estão autenticados (desafio).

versus

é a classe para autenticação que requer uma etapa de autenticação remota. Quando a etapa de autenticação remota for concluída, o manipulador retornará ao definido pelo manipulador. O handler conclui a etapa de autenticação usando as informações passadas para o caminho de callback . OAuth 2.0 e OIDC ambos usam esse padrão. JWT e cookies não, pois podem usar diretamente o cabeçalho do portador e para autenticar. O provedor hospedado remotamente neste caso:

  • É o provedor de autenticação.
  • Exemplos incluem o Facebook, o Twitter, o Google, o Microsoft e qualquer outro provedor de OIDC que manipula a autenticação de usuários usando o mecanismo de manipuladores.

Autenticar

A ação de autenticação de um esquema de autenticação é responsável por construir a identidade do usuário com base no contexto de solicitação. Ela retorna um que indica se a autenticação foi bem-sucedida e, nesse caso, a identidade do usuário em um tíquete de autenticação. Consulte . Exemplos de autenticação incluem:

  • Um esquema de autenticação que constrói a identidade do usuário a partir de cookies.
  • Um esquema de portador JWT que desserializa e valida um token de portador JWT para construir a identidade do usuário.

Desafio

Um desafio de autenticação é invocado pela autorização quando um usuário não autenticado solicita um endpoint que requer autenticação. Um desafio de autenticação é emitido, por exemplo, quando um usuário anônimo solicita um recurso restrito ou segue um link de logon. A autorização invoca um desafio usando os esquemas de autenticação especificados ou o padrão se nenhum for especificado. Consulte . Exemplos de desafio de autenticação incluem:

  • Um esquema de autenticação que redireciona o usuário para uma página de logon.
  • Um esquema de portador JWT que retorna um resultado 401 com um cabeçalho .

Uma ação de desafio deve permitir que o usuário saiba qual mecanismo de autenticação usar para access o recurso solicitado.

Proibir

A ação de proibição de um esquema de autenticação é acionada pela função de Autorização quando um usuário autenticado tenta acessar um recurso que não tem permissão para acessar. Consulte . Exemplos de proibição de autenticação incluem:

  • Um esquema de autenticação cookie redirecionando o usuário para uma página indicando que o acesso foi proibido.
  • Um esquema de portador JWT que retorna um resultado 403.
  • Um esquema de autenticação personalizado redirecionando para uma página em que o usuário pode solicitar acesso ao recurso.

Uma ação de proibição pode informar ao usuário:

  • Estão autenticados.
  • Eles não têm permissão para acessar o recurso solicitado.

Consulte os seguintes links para conhecer as diferenças entre desafio e proibição:

  • Desafiar e proibir usando um manipulador de recursos operacional.
  • Diferenças entre desafio e proibição.

Provedores de autenticação por locatário

ASP.NET Core framework não tem uma solução interna para autenticação multi-inquilino. Embora seja possível que os clientes escrevam um aplicativo com autenticação multilocatário, recomendamos usar uma das estruturas de aplicativos ASP.NET Core a seguir que dão suporte à autenticação multilocatário.

Orchard Core é uma estrutura de aplicativo de software livre, modular e multilocatário criada com ASP.NET Core que também fornece um CMS (sistema de gerenciamento de conteúdo). Consulte a origem Orchard Core para obter um exemplo de provedores de autenticação por locatário.

O ABP Framework dá suporte a vários padrões de arquitetura, incluindo modularidade, microsserviços, design controlado por domínio e multilocação. Consulte o código-fonte do ABP Framework no GitHub.

Recursos adicionais