Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在构建需要索赔的策略时,我们是否需要包括RequireAuthenticatedUser?_C#_Asp.net Core_Authentication_Model View Controller_Authorization - Fatal编程技术网

C# 在构建需要索赔的策略时,我们是否需要包括RequireAuthenticatedUser?

C# 在构建需要索赔的策略时,我们是否需要包括RequireAuthenticatedUser?,c#,asp.net-core,authentication,model-view-controller,authorization,C#,Asp.net Core,Authentication,Model View Controller,Authorization,在ASP.NET Core中创建自定义策略时,如下所示: services.AddAuthorization(options => { options.AddPolicy("MyCustomPolicy", policyBuilder => policyBuilder.RequireClaim("SomeClaim")); }); 按上述方式定义与按以下方式定义有什么区别: servic

在ASP.NET Core中创建自定义策略时,如下所示:

services.AddAuthorization(options =>
    {
        options.AddPolicy("MyCustomPolicy",
            policyBuilder => policyBuilder.RequireClaim("SomeClaim"));
    });
按上述方式定义与按以下方式定义有什么区别:

services.AddAuthorization(options =>
    {
        options.AddPolicy("MyCustomPolicy",
            policyBuilder => policyBuilder.RequireAuthenticatedUser()
                             .RequireClaim("SomeClaim"));
    });
我的意思是,有没有可能在没有经过认证的情况下提出索赔?如果是-它是如何工作的?举个例子来说明这种行为会很好

EDIT:是调用
requireRecreal
的需求的源代码,也是
RequireAuthenticatedUser

的源代码,从关于的文档中,我们可以找到:

Adds a DenyAnonymousAuthorizationRequirement to the current instance
下面的例子有助于了解它是如何工作的

添加自定义声明

如果没有,则调用
.RequireAuthenticatedUser
方法

我们可以发现匿名用户也可以通过声明检查并访问资源,如下所示


Related:换句话说,您可以在应用程序中向匿名用户添加声明-没问题。例如,“UserHasAcceptedCookies”可能是一种声明,允许用户访问网站的某些部分,即使这些部分未经验证。
app.UseAuthentication();

app.Use(async (context, next) =>
{
    //add a claim to this claims identity
    context.User.Identities.FirstOrDefault().AddClaim(new Claim("SomeClaim", "testval"));

    await next.Invoke();
});

app.UseAuthorization();
services.AddAuthorization(options =>
{
    options.AddPolicy("MyCustomPolicy",
        policyBuilder => policyBuilder.RequireClaim("SomeClaim"));

});