.नेट कोर बाईपास या बंद [अधिकृत(भूमिकाओं="")] के दौरान स्थानीय विकास

0

सवाल

मैं नीचे दिए गए कोड बायपास करने के लिए जोड़ने के प्रमाणीकरण के दौरान स्थानीय विकास, मैं उपयोग कर रहा हूँ Azure विज्ञापन और .नेट कोर.

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

हालांकि, के बाद से मैं अपने नियंत्रक के द्वारा संरक्षित अधिकृत विशेषता है, मैं कैसे बायपास अधिकृत विशेषता के अंदर नियंत्रक के दौरान स्थानीय विकास:

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

में .NET Framework मैं नीचे दिए गए कोड को ओवरराइड करने के लिए अधिकृत विशेषता:

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

क्या बराबर है के लिए कोड .नेट कोर ? या वहाँ किसी भी अन्य तरह से हम कर सकते हैं ओवरराइड अधिकृत विशेषता में स्टार्टअप.सीएस वर्ग ?

3
2

मुझे लगता है कि आप का उपयोग कर सकते हैं IClaimsTransformation के लिए है कि. इस मामले में, मैं बस को जोड़ने के लिए एक भूमिका हर किसी को है, लेकिन जब यह वायर्ड यह केवल यह कर यदि आप कर रहे हैं के विकास में (नोट: आप की आवश्यकता होगी सुनिश्चित करने के लिए परिवेश चर ठीक से सेट है, तो IsDevelopment काम करता है).

AddRolesClaimsTransformation.सीएस
/// <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;
    }
}
स्टार्टअप.सीएस
// Only in dev
if (builder.Environment.IsDevelopment())
{
    builder.Services.AddScoped<IClaimsTransformation, AddRolesClaimsTransformation>();
}

इस के लिए काम करना चाहिए ASP.NET कोर 3.1 के अनुसार माइक्रोसॉफ्ट डॉक्स. मैं यह परीक्षण किया है के खिलाफ .नेट 6 हालांकि (नहीं .नेट 6 टेम्पलेट्स के लिए नए स्थलों को स्थानांतरित Startup.cs सामान में Program.cs).

एक अन्य की ओर ध्यान दें, तो आप पर भरोसा करते हैं IsDevelopment पाइपलाइन है WebHostEnvironment आप नहीं होगा का उपयोग करने के लिए संकलक निर्देश दिये । कि जिस तरह से एक बार वातावरण में सेटअप है, यह सिर्फ काम करेंगे हालांकि आप इसे तैनात वहाँ (उदाहरण के लिए वहाँ नहीं है एक मौका एक दुर्घटना में डिबग का निर्माण करना होगा यह एक पर्यावरण में यह नहीं होना चाहिए में).

2021-11-23 23:24:51
2

के बजाय स्पष्ट रूप से निर्दिष्ट भूमिकाओं में से प्रत्येक नियंत्रक की आवश्यकता है के साथ [Authorize(Roles..., आप उपयोग कर सकते हैं [Authorize(Policy... जोड़ने के लिए एक परत के indirection.

कि जिस तरह से आप तय कर सकते हैं अपने StartUp वर्ग (या एक IConfigureOptions<AuthorizationOptions> सेवा), वास्तव में क्या प्रत्येक नीति का मतलब है । सहित किसी भी अन्य अजीब आवश्यकताओं तुम हो सकता है.

[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, मैं यह मिल गया धन्यवाद
VR1256
0

मैं यह काम कर रहा है का उपयोग कर नीचे दिए गए कोड के लिए धन्यवाद जेरेमी के लिए सही दिशा में:

में नियंत्रक वर्ग मैं नीति आधारित प्राधिकरण:

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

में शुरू करते हैं.सीएस हम जोड़ सकते हैं, प्रमाणीकरण और प्राधिकरण के आधार पर डिबग स्थिति:

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

के लिए RequireAuthenticatedUser() डिबग मोड में हम नीचे का उपयोग करने के लिए कोड जोड़ें AllowAnonymous विशेषता पर सभी नियंत्रकों:

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

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

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

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में