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 相结合。有很多例子可以说明如何做到这一点,例如
我们正在开发新的 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 相结合。有很多例子可以说明如何做到这一点,例如