.NET Core Bypass o disattivare [Autorizzare(Roles="")] durante lo sviluppo locale

0

Domanda

Ho seguito il codice per bypassare l'aggiunta di autenticazione durante lo sviluppo locale, la sto usando Azure & ANNUNCIO .NET Core.

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

Tuttavia da quando ho il mio controller protetto da Autorizzare attributo, come faccio a bypassare la Autorizzare un attributo all'interno di Controller durante lo sviluppo locale:

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

In .NET Framework che ho sotto il codice per eseguire l'override del Autorizzare l'attributo:

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

Che cosa è l'equivalente del codice per .NET Core ? o c'è qualche altro modo si può eseguire l'override di Autorizzare l'attributo in Avvio.cs classe ?

3
2

Penso che si può utilizzare un IClaimsTransformation per che. In questo caso, mi limiterò a aggiungere un ruolo per tutti, ma quando è collegato solo farlo se sei in fase di sviluppo (nota: È necessario assicurarsi che la variabile di ambiente è impostato correttamente, in modo che IsDevelopment opere).

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;
    }
}
L'avvio.cs
// Only in dev
if (builder.Environment.IsDevelopment())
{
    builder.Services.AddScoped<IClaimsTransformation, AddRolesClaimsTransformation>();
}

Questo dovrebbe funzionare per ASP.NET Core 3.1 secondo la Microsoft docs. L'ho testato contro .NETTO 6 tuttavia (in .NETTO 6 modelli per i nuovi siti di spostare il Startup.cs roba in Program.cs).

Un'altra nota di parte, se ci si basa sulla IsDevelopment impianto idraulico, che sul WebHostEnvironment non è necessario utilizzare le direttive del compilatore. Che modo una volta che l'ambiente è il programma di installazione sarà solo lavoro, tuttavia, la distribuzione (ad esempio non c'è la possibilità di un accidentale build di Debug farà in un ambiente non dovrebbe essere).

2021-11-23 23:24:51
2

Anziché specificare in modo esplicito i ruoli di ogni controller richiede con [Authorize(Roles...è possibile utilizzare [Authorize(Policy... per aggiungere un livello di indirezione.

In questo modo si può decidere nel vostro StartUp classe (o in un IConfigureOptions<AuthorizationOptions> servizio), esattamente ciò che ogni politica di mezzo. Compreso qualsiasi altro strano requisiti si potrebbe avere.

[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 ho capito grazie
VR1256
0

Ho capito di lavoro utilizzando il codice qui sotto grazie a Jeremy per giusta direzione:

Nella classe Controller ho usato la Politica di autorizzazione in base:

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

In avvio.cs possiamo aggiungere l'autenticazione e autorizzazione basata su DEBUG condizioni:

#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
                });
            });

Per RequireAuthenticatedUser() in modalità di debug usiamo il codice qui sotto per aggiungere AllowAnonymous attributo su tutti i controller di:

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

In altre lingue

Questa pagina è in altre lingue

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