匿名端点重定向到安全 ASP.Net 核心 Web 应用程序中的登录屏幕
Anonymous endpoint redirects to login screen in secured ASP.Net Core web application
我有一个最近迁移到 .Net 6.0 的 ASP.Net(Blazor 服务器端)5 Web 应用程序。它有几个私有端点,我们需要添加一个新的 public 端点。如果我们浏览到新的 public 端点,系统会将我们重定向到 Azure AD B2C 登录屏幕。我的理解是在端点方法上添加一个 [AllowAnonymous]
属性应该覆盖启动配置。
我错过了什么?
Startup.cs:
public virtual void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddHttpClient();
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(configuration.GetSection("AzureAdB2C"));
services.AddAuthorization();
services.AddControllersWithViews();
//Required as MVC must know whether it can rely on the authorization and CORS Middleware during initialization.
services.AddMvc(options => options.EnableEndpointRouting = false)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
#endregion
services.AddScoped<GlobalsService>();
services.Configure<AzureADB2C>(configuration.GetSection("AzureADB2C"));
}
public virtual void Configure(IApplicationBuilder app, IWebHostEnvironment env,
DataProtectionKeysContext dataProtectionKeysContext)
{
if (env.IsDevelopment())
{
..........................
}
else
{
app.Use((ctx, next) =>
{
return next();
});
}
app.UseHttpsRedirection();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseMvcWithDefaultRoute();//Required as MVC must know whether it can rely on the authorization and CORS Middleware during initialization.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllers();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
}
}
public api 通过 http://localhost:44300/api/GeneratePDF/get:
访问的端点
[ApiController]
[Route("api/[controller]")]
[Authorize]
public partial class GeneratePdfController : ControllerBase
{
public GeneratePdfController()
{
}
[HttpGet(Name = "Get")]
[AllowAnonymous]
public async Task<IActionResult> Get()
{
return Ok();
}
}
你的路由属性有误,试试这个
[AllowAnonymous]
[HttpGet("~/api/GeneratePDF/get")]
public async Task<IActionResult> Get()
或更改您的控制器路线
[Route("~/api/[controller]/[action]")]
public partial class GeneratePdfController : ControllerBase
我有一个最近迁移到 .Net 6.0 的 ASP.Net(Blazor 服务器端)5 Web 应用程序。它有几个私有端点,我们需要添加一个新的 public 端点。如果我们浏览到新的 public 端点,系统会将我们重定向到 Azure AD B2C 登录屏幕。我的理解是在端点方法上添加一个 [AllowAnonymous]
属性应该覆盖启动配置。
我错过了什么?
Startup.cs:
public virtual void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddHttpClient();
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(configuration.GetSection("AzureAdB2C"));
services.AddAuthorization();
services.AddControllersWithViews();
//Required as MVC must know whether it can rely on the authorization and CORS Middleware during initialization.
services.AddMvc(options => options.EnableEndpointRouting = false)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
#endregion
services.AddScoped<GlobalsService>();
services.Configure<AzureADB2C>(configuration.GetSection("AzureADB2C"));
}
public virtual void Configure(IApplicationBuilder app, IWebHostEnvironment env,
DataProtectionKeysContext dataProtectionKeysContext)
{
if (env.IsDevelopment())
{
..........................
}
else
{
app.Use((ctx, next) =>
{
return next();
});
}
app.UseHttpsRedirection();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseMvcWithDefaultRoute();//Required as MVC must know whether it can rely on the authorization and CORS Middleware during initialization.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllers();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
}
}
public api 通过 http://localhost:44300/api/GeneratePDF/get:
访问的端点 [ApiController]
[Route("api/[controller]")]
[Authorize]
public partial class GeneratePdfController : ControllerBase
{
public GeneratePdfController()
{
}
[HttpGet(Name = "Get")]
[AllowAnonymous]
public async Task<IActionResult> Get()
{
return Ok();
}
}
你的路由属性有误,试试这个
[AllowAnonymous]
[HttpGet("~/api/GeneratePDF/get")]
public async Task<IActionResult> Get()
或更改您的控制器路线
[Route("~/api/[controller]/[action]")]
public partial class GeneratePdfController : ControllerBase