ASP.net 基于IP地址的核心认证方式

ASP.net core authentication method based on IP address

我们正在开发新的 API。 此 API 可供内部和外部客户访问。

对于内部客户端,我们不需要任何身份验证。但对于外部客户端,需要身份验证(基于 JWT 令牌)。

所以,最终,我们想要这样的伪代码:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
            if (HttpContext.RemoteIP.IP != "192.168.1.1") // <== something like this
            {
                services.AddAuthentication(options =>
                {
                    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
                })
                    .AddJwtBearer(options =>
                        {
                            options.Authority = "https://Issuer.localdomain.local";
                            options.Audience = "TestAudience";
                        });
            }
                    
        }

显然,行 if (HttpContext.RemoteIP.IP != "192.1698.1.1") 行不通。但我希望它能阐明我们在这里要做的事情。

我认为你混淆了“认证”和“授权”。那是两个不同的过程。 “认证”是指系统确认您是您所声称的身份。 “授权”是系统根据您的凭据决定是否允许您访问资源。

“身份验证”过程通常不能基于 IP,因为它的结果应该是“声明”列表:用户名、角色、权限和其他属性。另一方面,“授权”可以。您基本上可以说“来自该 IP 的每个人都被授权无需身份验证即可访问该资源”。

要做到这一点,您基本上需要设置默认授权策略(通过调用 services.AddAuthorization()),将两个要求与 OR 相结合。有很多例子可以说明如何做到这一点,例如