【问题标题】:Do we need to include RequireAuthenticatedUser when building a policy that requires claims?在构建需要声明的策略时,我们是否需要包含 RequireAuthenticatedUser?
【发布时间】:2020-10-09 06:47:33
【问题描述】:

当您像这样在 ASP.NET Core 中创建自定义策略时:

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

与上面的定义和下面的定义有什么区别:

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

我的意思是,是否有可能在未经身份验证的情况下提出索赔?如果是 - 它是如何工作的?一个证明这种行为会很棒的例子!

编辑:This 是调用RequireClaim 的源代码,here'sRequireAuthenticatedUser 的源代码。

【问题讨论】:

标签: c# asp.net-core authentication model-view-controller authorization


【解决方案1】:

从关于AuthorizationPolicyBuilder.RequireAuthenticatedUser method的文档中,我们可以找到:

Adds a DenyAnonymousAuthorizationRequirement to the current instance

下面的例子可以帮助你了解它是如何工作的。

添加自定义声明

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

如果不调用.RequireAuthenticatedUser方法

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

});

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

【讨论】:

  • 换句话说:您可以在应用程序中向匿名用户添加声明 - 没问题。例如。 “UserHasAcceptedCookies”可能是一个声明,允许用户访问您网站的某些部分,即使它们没有经过身份验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
相关资源
最近更新 更多