Asp.net core 在ASP.NET核心授权策略中使用.RequireRole()而不使用.RequireAuthenticatedUser()是否安全?

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

Startup.cs中定义了一些策略,如:

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);
    }