> ## Content Index
> Fetch the complete content index at: https://www.azurebrasil.cloud/llms.txt
> Use this file to discover other available public pages before exploring further.

# Microsoft Entra ID - Consentimento Incremental com Asp.net Core
- URL: https://www.azurebrasil.cloud/blog/microsoft-entra-id-consentimento-incremental-com-asp-net-core/
- Published: 2024-01-10T17:22:18.000Z
- Updated: 2024-01-10T17:22:18.000Z
- Author: Rafael dos Santos

Ola pessoALL,

Estamos trabalhando em uma feature no [https://powerembedded.com.br/](https://powerembedded.com.br/?ref=azurebrasil.cloud) para acelerar o setup, fazendo um import dos relatórios e usuários já existentes na nossa plataforma.

Por questões de segurança e facilidade, quando criamos o ClientId inicial para acessarmos os dados do PowerBI criamos com o menor nível de scopes que precisávamos, mas para um import mais robusto precisamos de permissões administrativas.

Para saber um pouco mais sobre o setup de consentimento incremental recomendo o artigo brilhante que o [Talles](https://www.azurebrasil.cloud/author/talles/) já escreveu no blog dele.

[Utilizando o consentimento incremental do Azure ADNo post de hoje, irei falar sobre um desafio que tive que resolver durante o desenvolvimento de uma aplicação, utilizando o incremental…![](https://cdn-static-1.medium.com/_/fp/icons/Medium-Avatar-500x500.svg)tallesvaliatti.comTalles Destefani de Souza Valiatti![](https://miro.medium.com/v2/resize:fit:1000/1*zRQY_0NGEYyGocfZzin21w.png)](https://tallesvaliatti.com/utilizando-o-consentimento-incremental-do-aure-ad-85ee265d8acb?ref=azurebrasil.cloud)

Nesse artigo quero apenas trabalhar com um detalhe nos projetos de asp.net core, o redirecionamento para a tela de consentimento quando o usuário logado ainda não deu permissão.

Quando utilizamos o atributo \[AuthorizeForScopes\] o esperado é que o usuário seja redirecionado para a tela de permissão caso o consentimento ainda não tenha sido realizado, mas ao invés disso recebemos um erro:

ErrorCode: invalid\_grant  
Microsoft.Identity.Client.MsalUiRequiredException: AADSTS65001: The user or administrator has not consented to use the application with ID 'client-id' named 'app-name'. Send an interactive authorization request for this user and resource.

A documentação do pacote não é muito clara em afirmar que precisamos adicionar um bloco try/catch para lidar com o redirecionamento.

[Managing incremental consent and conditional accessHelps creating protected web apps and web APIs with Microsoft identity platform and Azure AD B2C - AzureAD/microsoft-identity-web![](https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg)GitHubAzureAD![](https://opengraph.githubassets.com/359e274b64ef0eab63bdd3019f132961030a4fe10900ceb0fa6e9771d3f5f54e/AzureAD/microsoft-identity-web)](https://github.com/AzureAD/microsoft-identity-web/wiki/Managing-incremental-consent-and-conditional-access?ref=azurebrasil.cloud)

```csharp
[HttpGet]
      [AuthorizeForScopes(Scopes = new string[] { "https://analysis.windows.net/powerbi/api/Workspace.ReadWrite.All", "Group.Read.All", "GroupMember.Read.All",
          "https://analysis.windows.net/powerbi/api/Tenant.ReadWrite.All"})]
      public async Task<IActionResult> GenerateToken(
          [FromServices] IAuthorizationHeaderProvider authorizationHeaderProvider,
          [FromServices] MicrosoftIdentityConsentAndConditionalAccessHandler consentHandler,
          [FromServices] ILogger<MigrationController> logger)
      {
          try
          {
              var accessToken = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(MigrationPermissions);
              ViewBag.AccessToken = accessToken;
          }
          catch (MicrosoftIdentityWebChallengeUserException)
          {
              try
              {
                  consentHandler.ChallengeUser(MigrationPermissions);
              }
              catch (Exception exception)
              {
                  consentHandler.HandleException(exception);
              }

              return new EmptyResult();
          }
          catch (Exception ex)
          {
              logger.LogError(ex, "It was not possible generate a user token for the migration script.");
          }
          return View("Index", MigrationPermissions);
      }
```

Para realizarmos os redirecionamentos adequados basta tratarmos a exception do tipo **MicrosoftIdentityWebChallengeUserException** e o pacote fara o resto que precisamos.

Uma dica simples, mas que pode salvar horas de debugger.  
\[\]s e até a próxima.