繁体   English   中英

Azure AD 身份验证似乎在我的 ASP.Net Core 2.2 应用程序中被跳过

[英]Azure AD Authentication seems to be skipped in my ASP.Net Core 2.2 application

我有一个空的 ASP.Net Core 应用程序,我想调用 Azure AD 身份验证。 但是我的“milldeware”似乎总是忽略身份验证。 请帮助我找出根本原因。 谢谢..Net Core 2.2

下面是我的startup.cs

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                .AddAzureAD(options => Configuration.Bind("AzureAd", options));

            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("AzureAD", new AuthorizationPolicyBuilder()
                    .AddAuthenticationSchemes(AzureADDefaults.AuthenticationScheme‌​)
                    .RequireAuthenticatedUser().Build());
            });

            services.AddMvc();

            services.AddRouting();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseAuthentication();

            app.UseRouter(routes =>
            {
                routes.MapGet(string.Empty, HomeMiddleware);
                routes.MapGet("test", TestMiddleware);
            });
        }

下面是一些我想路由的中间件。

        [Authorize]
        private Task HomeMiddleware(HttpContext context)
        {
            return context.Response.WriteAsync($"control, User: {context.User.Identity.Name}");

        }

        [Authorize]
        private Task TestMiddleware(HttpContext context)
        {
            return Task.Run(() =>
            {
                var writer = new HttpResponseStreamWriter(context.Response.Body, Encoding.UTF8);
                writer.Write("test");
                writer.Flush();
                writer.Write("another test");
                writer.Flush();
            });
        }
    }

似乎 [Authorize] 不适用于我的“中间件”。 context.User.Identity.Name不会向我返回任何内容,也不会将我重定向到 AzureAD 身份验证页面。

首先,您不想设置默认策略而不是仅创建策略。 对于那个用途

 auth.AddDefaultPolicy(builder => builder
     .AddAuthenticationSchemes(AzureADDefaults.AuthenticationScheme‌​)
     .RequireAuthenticatedUser().Build());

其次,您要添加授权中间件,而不仅仅是身份验证中间件。

 app.UseAuthentication();

 app.UseAuthorization();

 app.UseRouter(routes =>
 ...

没有这个中间件授权属性没有效果afaik

您也可以按原样保留保单,并且

A)在app.UseAuthorization()调用上使用它,我相信在那里选择默认策略名称会过载。

B) 将其保留为非默认策略,并在您的控制器上使用[Authorize("<policyName>")]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM