基于IP地址的ASP.net Core认证方法

问题描述 投票:0回答:2

我们正在开发新的 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")
行不起作用。但我希望它能澄清我们在这里尝试做的事情。

asp.net-core authentication jwt
2个回答
2
投票

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

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

为此,您基本上需要设置默认授权策略(通过调用

services.AddAuthorization()
),并结合两个要求和 OR。有很多关于如何做到这一点的例子,例如ASP.NET Core 授权:组合 OR 需求


0
投票

ASP.NET Core 文档有一篇关于此的文章。 基本上有3种实现方式:

  • 检查每个请求的远程IP地址的中间件。
  • MVC 操作过滤器检查请求的远程 IP 地址 具体控制器或动作方法。
  • Razor Pages 过滤器检查请求的远程 IP 地址 剃刀页面。

您可以在此处查看(ASP.NET Core 的客户端 IP 安全列表)

© www.soinside.com 2019 - 2024. All rights reserved.