.ส่งแกเจาะผ่านได้ถ้านี่เป็นการปล้นหรือปิด[นอนุญาต(บทบาท="")]ตอนท้องถิ่นการพัฒนา

0

คำถาม

ฉันต้องด้านล่างรหัสผ่านการเพิ่มการตรวจสอบสิทธิ์ตอนท้องถิ่นพัฒนาการ,ฉันใช้ Color โฆษณา&.อข่ายส่วนกลาง

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

แต่ตั้งแต่ฉันมีของฉัน controller ได้รับการปกป้องจากอนุญาตคุณลักษณะยังไงฉันผ่านอนุญาตแอททริบิวต์ใน Controller ตอนท้องถิ่นการพัฒนา:

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

เข้ามาอข่ายส่วนเฟรมเวิร์กฉันต้องด้านล่างรหัสยกเลิกที่อนุญาตแอททริบิวต์:

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 ตามที่ไมโครซอฟ docs. ฉันทดสอบมันต่อต้าน.อข่ายนอก 6 ย่างไรก็ตาม(อยู่อข่ายนอก 6 คนต้นแบบสำหรับคนใหม่เว็บไซต์ย้าย Startup.cs เรื่องเข้า Program.cs).

หนึ่งอีกด้านโน้ต,ถ้าคุณเชื่อใจคน IsDevelopment ท่อประปามันก็เกี่ยวข้องกับที่ WebHostEnvironment คุณไม่ต้องใช้คอมไพเลอร์เป้าหมาย. ทางนั้นเมื่อสภาพแวดล้อมการตั้งค่ามันจะแค่ทำงานอย่างไรก็ตามคุณจะยกขึ้นมันมี(e.g. ไม่มีโอกาสเป็นเป็นอุบัติเหตุการดีบั๊กสร้างขึ้นจะทำให้มันไปเป็นสภาพแวดล้อมมันไม่ควรจะอยู่ใน).

2021-11-23 23:24:51
2

มากกว่าในข้อบังคับของระบุค่าที่เป็นบทบาทกัน controller ต้องการกับ [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

ฉันมีมันทำงานโดยใช้รหัสทางด้านล่างขอบคุณต้องเจอเรมี่เพื่อความถูกต้องทิศทาง:

ใน Controller เรียนฉันใช้ข้อกำหนดจากการตรวจสอบสิทธิ์:

 [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 แอททริบิวต์ทั้งหมดที่ controllers:

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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่