You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET Core 5中为匿名用户创建授权策略

实现匿名用户匹配授权策略的两种方案

方案1:内置断言快速实现(无需额外定义类,适合简单场景)

直接在策略配置中使用RequireAssertion方法编写判断逻辑即可,代码如下:

public static void AddAuthorizationAndPolicies(this IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        // 已登录用户策略
        options.AddPolicy("IsLoggedIn",
            policy => policy.RequireAuthenticatedUser());
        
        // 管理员用户策略
        options.AddPolicy("IsAdminUser",
            policy => policy.RequireRole("Admin"));

        // 匿名用户策略 - 直接通过断言判断
        options.AddPolicy("IsAnonymousUser",
            policy => policy.RequireAssertion(context => 
                !context.User.Identity.IsAuthenticated));
    });
}

方案2:自定义授权要求(适合需要复用逻辑、后续扩展判断规则的场景)

需要分三步实现:

  1. 自定义授权要求标记类,实现IAuthorizationRequirement接口
public class AnonymousOnlyRequirement : IAuthorizationRequirement
{
    // 仅作为策略标记,无需额外实现属性或方法
}
  1. 实现对应的授权处理器
public class AnonymousOnlyHandler : AuthorizationHandler<AnonymousOnlyRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, AnonymousOnlyRequirement requirement)
    {
        // 验证用户未登录即为匿名用户
        if (!context.User.Identity.IsAuthenticated)
        {
            context.Succeed(requirement);
        }
        else
        {
            context.Fail();
        }
        return Task.CompletedTask;
    }
}
  1. 注册处理器并配置策略
public static void AddAuthorizationAndPolicies(this IServiceCollection services)
{
    // 注册自定义授权处理器
    services.AddSingleton<IAuthorizationHandler, AnonymousOnlyHandler>();

    services.AddAuthorization(options =>
    {
        // 已登录用户策略
        options.AddPolicy("IsLoggedIn",
            policy => policy.RequireAuthenticatedUser());
        
        // 管理员用户策略
        options.AddPolicy("IsAdminUser",
            policy => policy.RequireRole("Admin"));

        // 匿名用户策略 - 添加自定义要求
        options.AddPolicy("IsAnonymousUser",
            policy => policy.AddRequirements(new AnonymousOnlyRequirement()));
    });
}

注意事项

如果使用该策略控制登录、注册等仅匿名用户可访问的接口,不要同时添加[AllowAnonymous]特性,该特性会跳过所有授权校验,导致策略失效。

内容的提问来源于stack exchange,提问作者MRB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:54:07