.NET Core Eludir o desactivar [Autorizar(Roles="")] durante el desarrollo local

0

Pregunta

He a continuación el código eludir la adición de autenticación durante el desarrollo local, la estoy usando Azure AD & .NET Core.

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

Sin embargo desde que tengo mi controlador protegido por Autorizar atributo, ¿cómo puedo omitir el Autorizar atributo dentro de la Controladora durante el desarrollo local:

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

En .NET Framework tengo a continuación el código para anular el Autorizar atributo:

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

¿Qué es el código equivalente para .NET Core ? o hay alguna otra manera podemos sustituir Autorizar atributo en el Inicio.cs de la clase ?

3
2

Creo que se puede usar un IClaimsTransformation por eso. En este caso, sólo voy a agregar una función a todos, pero cuando es con cable que sólo lo hará si usted está en desarrollo (nota: Usted tendrá que asegurarse de que la variable de entorno está configurado correctamente para IsDevelopment las 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;
    }
}
Inicio.cs
// Only in dev
if (builder.Environment.IsDevelopment())
{
    builder.Services.AddScoped<IClaimsTransformation, AddRolesClaimsTransformation>();
}

Esto debería funcionar para ASP.NET Core 3.1 según Microsoft docs. He probado contra .RED 6 sin embargo (en .RED 6 las plantillas para sitios nuevos mover el Startup.cs cosas en Program.cs).

Otra nota de lado, si usted confía en el IsDevelopment las tuberías que en la WebHostEnvironment usted no tiene que utilizar las directivas de compilador. De esa manera una vez que el entorno de instalación se acaba de trabajar, sin embargo la implementación de allí (por ejemplo, no hay una posibilidad de un accidental generación de Depuración se hacen en un ambiente no debería estar).

2021-11-23 23:24:51
2

En lugar de especificar explícitamente los roles de cada controlador requiere con [Authorize(Roles...usted puede utilizar [Authorize(Policy... para agregar una capa de indirección.

De esa manera usted puede decidir en su StartUp la clase (o en un IConfigureOptions<AuthorizationOptions> de servicio), exactamente lo que cada una política de medios. Incluyendo cualquier otro extraño requisitos que usted pueda tener.

[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 lo tengo gracias
VR1256
0

Yo tengo trabajo, utilizando a continuación el código gracias a Jeremy para la dirección correcta:

En la clase de Controlador he utilizado la Política de la autorización basada en:

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

En el inicio.cs podemos añadir autenticación y autorización basada en la DEPURACIÓN de condiciones:

#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() en el modo de depuración utilizamos el siguiente código para agregar AllowAnonymous atributo en todos los controladores:

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

En otros idiomas

Esta página está en otros idiomas

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