Asp.net core 在ASP.NET核心授权策略中使用.RequireRole()而不使用.RequireAuthenticatedUser()是否安全?
Startup.cs中定义了一些策略,如:Asp.net core 在ASP.NET核心授权策略中使用.RequireRole()而不使用.RequireAuthenticatedUser()是否安全?,asp.net-core,asp.net-identity,Asp.net Core,Asp.net Identity,Startup.cs中定义了一些策略,如: services.AddAuthorization(选项=> { options.AddPolicy(“UsersEdit”,policy=>policy .RequireAuthenticatedUser()文件 .RequireRole(“管理员”); }); 将此代码重写为以下内容是否安全: services.AddAuthorization(选项=> { options.AddPolicy(“UsersEdit”,policy=>policy
services.AddAuthorization(选项=>
{
options.AddPolicy(“UsersEdit”,policy=>policy
.RequireAuthenticatedUser()文件
.RequireRole(“管理员”);
});
将此代码重写为以下内容是否安全:
services.AddAuthorization(选项=>
{
options.AddPolicy(“UsersEdit”,policy=>policy.RequireRole(“Admin”);
});
我猜未经授权的用户不能有任何角色。如果我们检查源代码以了解
RequireAuthenticatedUser
在以下位置添加的授权要求:
它添加了一个检查,即用户必须具有身份,并且其中一个用户必须表示该用户已通过身份验证
IsAuthenticated
在
如果AuthenticationType属性不是null或空字符串,则为true
因此,理论上,用户可以通过拥有一个没有身份验证类型的身份来扮演角色。
但实际上,这不应该发生。
任何合理的身份验证处理程序都不会将AuthenticationType保留为空,因为IsAuthenticated
将返回false
var user = context.User;
var userIsAnonymous =
user?.Identity == null ||
!user.Identities.Any(i => i.IsAuthenticated);
if (!userIsAnonymous)
{
context.Succeed(requirement);
}