.NET Core by-pass sau dezactivați [Autoriza(Roluri="")] în timpul de dezvoltare locală

0

Problema

Am codul de mai jos pentru a ocoli adăugarea de autentificare în timpul de dezvoltare locală, eu sunt, folosind Azure AD & .NET Core.

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

Cu toate acestea, deoarece am controller protejat de Autoriza atribut, cum pot ocoli Autoriza atribut din interiorul Controlerului în timpul de dezvoltare locală:

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

În .NET Framework nu am codul de mai jos pentru a trece peste Autoriza atribut:

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

Ceea ce este echivalent cod pentru .NET Core ? sau exista vreun alt mod de a trece peste Autoriza atribut la Pornire.cs clasa ?

3
2

Cred că puteți utiliza un IClaimsTransformation pentru că. În acest caz, voi adăuga doar un rol pentru toata lumea, dar atunci când este conectat se va face numai dacă ești în dezvoltare (notă: va trebui să asigurați-vă că variabila de mediu este setată corect asa IsDevelopment lucrări).

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

Acest lucru ar trebui să lucreze pentru ASP.NET Core 3.1 potrivit Microsoft docs. L-am testat împotriva .NET 6 cu toate acestea (în .NET 6 template-uri pentru site-uri noi muta Startup.cs lucrurile în Program.cs).

O altă notă, dacă vă bazați pe IsDevelopment sanitare care e pe WebHostEnvironment tu nu va trebui să utilizați compiler directive. Așa odată mediu este de configurare se va lucra doar cu toate acestea implementa acolo (de exemplu, nu există o șansă accidentală construi Depanare se va face intr-un mediu nu ar trebui să fie în).

2021-11-23 23:24:51
2

Mai degrabă decât în mod explicit, specificând rolul fiecărui operator necesită cu [Authorize(Roles..., puteți utiliza [Authorize(Policy... pentru a adăuga un strat de indirectare.

În acest fel puteți decide în StartUp clasa (sau într-un IConfigureOptions<AuthorizationOptions> serviciu), exact ceea ce fiecare politică înseamnă. Inclusiv orice alte cerințe pe care le-ar putea avea.

[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 am luat-o multumesc
VR1256
0

Am luat-o de lucru, folosind codul de mai jos mulțumită lui Jeremy pentru direcția cea bună:

În clasa Controller-am folosit de Politica de autorizare bazate pe:

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

La început.cs putem adauga autentificare și autorizare pe baza de DEPANARE condiții:

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

Pentru RequireAuthenticatedUser() în modul de depanare vom folosi codul de mai jos pentru a adauga AllowAnonymous atribut pe toate controlerele:

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

În alte limbi

Această pagină este în alte limbi

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