.NET Core Obísť alebo vypnúť [Povoliť(Role="")] počas miestneho rozvoja

0

Otázka

Mám nižšie uvedený kód obísť pridanie overovanie počas miestneho rozvoja, ja používam Azure AD & .NET Core.

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

Avšak keďže mám radič chránené Povoliť atribút, ako môžem obísť Autorizáciu atribút vnútri Regulátora počas miestneho rozvoja:

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

V .NET Framework mám nižšie uvedený kód na zmenu Povoliť atribút:

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

Čo je ekvivalent kód .NET Core ? alebo existuje nejaký iný spôsob, ako môžeme prepísať Povoliť atribút v Štarte.cs triedy ?

3
2

Myslím, že môžete použiť IClaimsTransformation za to. V tomto prípade som si len chcete pridať úlohu, aby každý, ale keď je to káblové až to bude iba to urobiť, ak ste v rozvoji (poznámka: Budete musieť uistite sa, že premenné nastavené správne, tak 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;
    }
}
Pri spustení.cs
// Only in dev
if (builder.Environment.IsDevelopment())
{
    builder.Services.AddScoped<IClaimsTransformation, AddRolesClaimsTransformation>();
}

Toto by mali pracovať pre ASP.NET Jadro 3.1 podľa Microsoft dokumenty. Testoval som to proti .ČISTÝ 6 je však (v .ČISTÝ 6 šablón pre nové stránky presuňte Startup.cs veci do Program.cs).

Jedna druhej strane vedomie, ak sa spoľahnúť na IsDevelopment inštalatérske, že je na WebHostEnvironment nebudete musieť použiť kompilátor smerníc. Tak raz prostredia je nastavenie bude to len práca však môžete umiestniť ho tam (napr. nie je možnosť náhodného Debug stavať bude, aby sa do prostredia, to nemala byť v).

2021-11-23 23:24:51
2

Skôr, než výslovne zadanie úlohy každý radič s [Authorize(Roles...môžete použiť [Authorize(Policy... ak chcete pridať vrstvu dereference.

Týmto spôsobom môžete rozhodnúť vo vašom StartUp trieda (alebo v IConfigureOptions<AuthorizationOptions> služba), presne to, čo každá politika znamená. Vrátane akýchkoľvek ostatných zvláštne požiadavky, ktoré by mohli mať.

[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 ja to mám ďakujeme
VR1256
0

Dostal som sa pracovať pomocou kód nižšie vďaka Jeremy pre správny smer:

V Radič trieda som použil Politiky oprávnenie na základe:

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

V začiatku.cs môžeme pridať autentifikácia a autorizácia na základe DEBUG podmienky:

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

Pre RequireAuthenticatedUser() v režime ladenia sme použite nižšie uvedený kód pridať AllowAnonymous atribút na všetky radiče:

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

V iných jazykoch

Táto stránka je v iných jazykoch

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