ASP.NET core如何仅对特定路由使用身份验证?

Kar*_*ara 2 asp.net authentication single-page-application reactjs asp.net-core

我配置为对我的 ASP.NET React 应用程序使用 Windows 身份验证。

在ConfigureServices()方法上:

services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});
Run Code Online (Sandbox Code Playgroud)

然后在configure()方法上:

app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

Run Code Online (Sandbox Code Playgroud)

但是,通过这样做,所有请求都将触发身份验证过程。实际上,我只希望我的 api 路由(在 中/api/my/resource)使用 Windows 身份验证是安全的,并且希望让整个 React 资源文件夹公开(在 中/any/path/here)。

如何配置为仅对以/api.

Kar*_*ara 5

我通过这样做实现了这一点:

services.AddAuthorization(options =>
{
    // don't use default policy
    // options.FallbackPolicy = options.DefaultPolicy;
});
Run Code Online (Sandbox Code Playgroud)

然后添加[Authorize]需要认证的控制器。

[Authorize]     // trigger authentication process
[Route("api/[controller]")]
[ApiController]
public class MyController : ControllerBase {}
Run Code Online (Sandbox Code Playgroud)

然后我可以选择特定的路由来要求身份验证。