.NET Núcleo de Ignorar ou desativar [Autorizar(Roles="")] durante o desenvolvimento local

0

Pergunta

Eu tenho abaixo do código para ignorar a adição de autenticação durante o desenvolvimento local, eu estou usando Azure AD & .NET Núcleo.

#if !DEBUG
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
               .AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"));
#endif

No entanto, desde que eu tenha o meu controlador protegidos por Autorizar atributo, como faço para ignorar a Autorizar atributo dentro do Controlador durante o desenvolvimento local:

[Authorize(Roles = "Buyer")]
public class ProductController : ApiBaseController
{
}

Em .NET Framework que eu tenho abaixo do código para substituir a Autorizar o atributo:

public class MyAuthorizeAttribute : AuthorizeAttribute
    {
     #if DEBUG
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            return true;
        }
     #endif
    }

O que é o equivalente a código .NET Core ? ou existe alguma outra maneira que pode substituir Autorizar o atributo na Inicialização.cs classe ?

3
2

Eu acho que você pode usar um IClaimsTransformation para que. Neste caso, eu vou apenas adicionar um papel para todos, mas quando é com fio, ela só vai fazer isso se você está em desenvolvimento (nota: Você precisará certifique-se de que a variável de ambiente é definida corretamente para IsDevelopment obras).

AddRolesClaimsTransformation.cs
/// <summary>
/// Adds roles to a user on the fly, this will hard code a Buyer role for everyone.
/// </summary>
public class AddRolesClaimsTransformation : IClaimsTransformation
{
    public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {
        // Clone current identity
        var clone = principal.Clone();
        var ident = (ClaimsIdentity)clone.Identity;

        ident.AddClaim(new Claim(ClaimTypes.Role, "Buyer"));

        return clone;
    }
}
O arranque.cs
// Only in dev
if (builder.Environment.IsDevelopment())
{
    builder.Services.AddScoped<IClaimsTransformation, AddRolesClaimsTransformation>();
}

Isso deve funcionar para ASP.NET Núcleo 3.1 de acordo com a Microsoft docs. Eu testei-o contra .LÍQUIDO 6 no entanto (na .LÍQUIDO 6 modelos para novos sites mover o Startup.cs coisas em Program.cs).

Uma outra nota de lado, se você contar com o IsDevelopment encanamento que está no WebHostEnvironment você não tem que usar as diretivas de compilador. De que maneira uma vez que o ambiente é o programa de configuração irá apenas funcionar no entanto implantá-lo lá (e.g. não há uma chance acidental compilação de Depuração irá torná-lo em um ambiente não deveria ser).

2021-11-23 23:24:51
2

Em vez de especificar explicitamente as funções de cada controlador requer com [Authorize(Roles..., você pode usar [Authorize(Policy... para adicionar uma camada de indireção.

Dessa forma, você pode decidir em seu StartUp classe (ou em um IConfigureOptions<AuthorizationOptions> de serviço), exatamente o que cada política. Incluindo qualquer outro estranho requisitos que você possa ter.

[Authorize(Policy= "Buyer")]
public class ProductController : ApiBaseController

...

services.AddAuthorization(o =>
{
    o.AddPolicy("Buyer", b => {
#if DEBUG
        b.RequireAuthenticatedUser();
#else
        b.RequireRole("Buyer");
#endif
    });
});
2021-11-23 23:18:53

Nvm eu tenho que agradecer a você
VR1256
0

Eu tenho que trabalhar usando o código abaixo, graças a Jeremy para a direção certa:

No Controlador de classe I utilizado Política de autorização com base em:

 [Authorize(Policy= "Buyer")]
 public class ProductController : ApiBaseController
 {
 }

No início.cs podemos adicionar autenticação e autorização com base na DEPURAÇÃO condições:

#if !DEBUG
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
               .AddMicrosoftIdentityWebApi(config.GetSection("AzureAd"));
#endif

            services.AddAuthorization(options =>
            {
                // policy for read access
                options.AddPolicy("Buyer", policy =>
                {
#if DEBUG
                    policy.RequireAuthenticatedUser();
#else
                    policy.RequireRole("Buyer");
#endif
                });
            });

Para RequireAuthenticatedUser() no modo de depuração, use o código abaixo para adicionar AllowAnonymous atributo em todos os controladores de:

app.UseEndpoints(endpoints =>
            {
#if DEBUG
                endpoints.MapControllers().WithMetadata(new AllowAnonymousAttribute());
#else
                    endpoints.MapControllers();
#endif
            });
2021-11-24 00:59:47

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................