[英]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.