.NET 핵심은 무시하거나 끄[승인(역할="")]동안 지역 개발

0

질문

나는 아래 코드를 우회하는 인증을 추가하는 동안 지역 개발을,나를 사용하여 AD Azure&.NET 핵심입니다.

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

무엇이 다음과 같은 코드를 사용합니다.NET Core? 또는 어떤 다른 방법으로 우리는 무시할 수 있습 권한을 부여 특성에서 시작합니다.cs 등?

3
2

나는 생각한 사용할 수 있습니다 IClaimsTransformation 니다. 이 경우에,나는 단지 역할을 추가,모든 사람에게 그 때 그것은 유선이 그것을 할 것입니다면 당신은 그것을 개발(주:당하고 있는지 확인해야는 환경변수 설정을 올바르게 그렇게 IsDevelopment 작동합니다).

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

이스 ASP.NET 핵심 3.1 에 따라 문서는 Microsoft. 나는 그것을 테스트합니다.NET6 그러나(습니다.NET6 템플릿에 대한 새로운 사이트로 이동 Startup.cs 재료 Program.cs).

다른 하나의 측면에 의존 IsDevelopment 배관에 있는 WebHostEnvironment 당신이 없을 사용하여 컴파일러 지시어. 는 방식되면 환경 설정 그것은 단지 작업 그러나 배포할 수 있는(예를 들어 있지 않은 기회 실수로 디버그 빌드를 만들 것입니다 그것은 환경으로 그것에 있어야하는데).

2021-11-23 23:24:51
2

보다 명시적으로 지정하는 역할을 필요로하는 각 컨트롤러 [Authorize(Roles...사용할 수 있습니다 [Authorize(Policy... 추가 계층 간접 참조.

는 방법을 결정할 수 있습에서 당신의 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
 {
 }

에서 시작합니다.cs 추가할 수 있습니다 인증 및 권한에 따라 디버그 조건:

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