C# 在构建需要索赔的策略时,我们是否需要包括RequireAuthenticatedUser?
在ASP.NET Core中创建自定义策略时,如下所示: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
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"));
});