首页 > 解决方案 > 选择不使用授权的 AuthenticationScheme

问题描述

身份验证 = 谁在打电话?
授权=他们可以这样做吗?

我的代码中有几个调用AddJwtBearer。它创建了我支持的几个不同的 JWT 场景。

我也设置了options.DefaultAuthenticateScheme = "MyAuthenticationScheme"

当对没有[Authorize]标签的控制器方法进行调用时,它会将User.Identity对象设置为在调用AddJwtBearerfor时设置的 JWT 中的数据"MyAuthenticationScheme"

但是,如果该 JWT 不存在,则调用将通过并且User.Identity对象中只有空值。这对我想要的很好。

我希望有一种方法可以在我的控制器中为我的方法添加一个属性,让我无需使用[Authorize].

我的理由是我只是想设置“谁在打电话”(身份验证)。现在,我有另一个系统来处理“你能做什么”(授权)。

在每个控制器方法的基础上,有没有办法在不使用[Authorize]属性的情况下切换 AuthenticationSchemes?

就像是[Authentication (Scheme = "MyOtherAuthenticationScheme")]

标签: c#asp.net-coreasp.net-core-3.1

解决方案


您应该能够将AllowAnonymous与您的Authorize属性一起添加。

 [Authorize(AuthenticationSchemes = "Bearer")]
 [AllowAnonymous]

推荐阅读