Asp.net core asp.net核心覆盖默认身份验证策略
我使用一个默认策略和一个命名策略设置授权,如下所示Asp.net core asp.net核心覆盖默认身份验证策略,asp.net-core,asp.net-identity,Asp.net Core,Asp.net Identity,我使用一个默认策略和一个命名策略设置授权,如下所示 services.AddAuthorization(options => { AuthorizationPolicyBuilder defaultPolicyBuilder = new AuthorizationPolicyBuilder(CertificateAuthenticationDefaults.AuthenticationScheme, JwtBearerDefa
services.AddAuthorization(options =>
{
AuthorizationPolicyBuilder defaultPolicyBuilder = new AuthorizationPolicyBuilder(CertificateAuthenticationDefaults.AuthenticationScheme,
JwtBearerDefaults.AuthenticationScheme, CookieAuthenticationDefaults.AuthenticationScheme);
defaultPolicyBuilder = defaultPolicyBuilder.RequireAuthenticatedUser();
options.DefaultPolicy = defaultPolicyBuilder.Build();
options.AddPolicy("CertOnly", policy =>
{
policy.RequireAuthenticatedUser();
policy.AddAuthenticationSchemes(CertificateAuthenticationDefaults.AuthenticationScheme);
});
});
基本上,默认方案将接受jwt、cookie和cert,而cert only应该只接受cert
如果我只定义了一个[Authorize]
标记,它就可以正常工作
但是,当我在控制器级别应用[Authorize]
标记,并希望在操作中将其覆盖为[Authorize(Policy=“CertOnly”)]
当定义了多个Authorize属性时,看起来它正在执行OR操作,因为我现在可以使用有效的Jwt调用该操作。如果我删除控制器上的[Authorize]
,那么我只能使用有效的证书调用它
如何将其设置为AND操作或仅覆盖默认策略?我建议您覆盖默认策略。它可能涉及多个级别的认证。@Karney。问题是怎么做?如何同时使用默认策略和命名策略?抱歉,这么长时间以来,证书身份验证默认是针对每个请求的,请访问官网。如果当前请求仅用于证书身份验证。您可以编写中间件来确定当前请求的模式,并根据请求的路径拒绝其他身份验证模式。您可以参考官方代码(身份验证中间件)。@Karney。这是我试图避免的最后一个组合。身份验证方案提供了我需要的东西,我希望能够利用它,因为它是内置的,不需要自定义代码。另一种方法是自定义中间件,从
IAuthorizationPolicyProvider
和路由路径获取模式。然后阻止除当前身份验证方案之外的其他身份验证方案。