.NET Jádro Obejít nebo vypnout [Povolit(Role="")] během místního rozvoje

0

Otázka

Mám níže uvedený kód, aby se vyhnula přidání ověřování během místní rozvoj, jsem pomocí Azure AD & .NET Jádro.

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

Nicméně protože mám regulátor chráněn Povolit atribut, jak to mám obejít, Povolit atribut uvnitř Regulátoru během místní rozvoj:

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

V .NET Framework mám pod kód přepsat Povolit atribut:

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

Co je ekvivalentní kód pro .NET Jádro ? nebo je nějaký jiný způsob, jak můžeme přepsat Povolit atribut při Spuštění.cs třída ?

3
2

Myslím, že můžete použít IClaimsTransformation pro. V tomto případě, budu jen přidat roli pro každého, ale když je to pevné až to bude dělat jen to, pokud jste ve vývoji (poznámka: Budete potřebovat k ujistěte se, že proměnná prostředí je nastavena správně, takže IsDevelopment funguje).

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

To by mělo fungovat pro ASP.NET Jádro 3.1 podle Microsoft docs. Testoval jsem je proti .NET 6 však (v .NET 6 šablon pro nové weby přesunout Startup.cs věci do Program.cs).

Jeden další poznámka, pokud jste spoléhat na IsDevelopment instalace, která je na WebHostEnvironment nebudete muset použít direktivy překladače. Takhle jednou na životní prostředí je nastavení to bude jen práci, ale nasadit to tam (např. tam není možnost náhodného Debug build, aby se do prostředí, nemělo by být).

2021-11-23 23:24:51
2

Spíše než explicitně určující role každý správce vyžaduje s [Authorize(Roles...můžete použít [Authorize(Policy... přidat vrstvu dereference.

Tímto způsobem můžete rozhodnout, ve své StartUp třídy (nebo v IConfigureOptions<AuthorizationOptions> služby), přesně to, co politika znamená. Včetně nějaké jiné zvláštní požadavky, můžete mít.

[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 já to mám děkuji
VR1256
0

Mám to v práci pomocí níže uvedeného kódu díky Jeremy pro správný směr:

V Správce třídy jsem použil Politiky na základě autorizace:

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

V začátku.cs můžeme přidat autentizace a autorizace založený na LADĚNÍ podmínky:

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

Pro RequireAuthenticatedUser() v režimu ladění, můžeme použít níže uvedený kód přidat AllowAnonymous atribut na všechny řadiče:

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

V jiných jazycích

Tato stránka je v jiných jazycích

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