我有两种不同类型的JWT,我的.Net Core 3.1 Web API服务可以使用它们进行身份验证。
我的控制器的服务操作有时需要一个或两个都存在。有时,任何人都可以打电话给他们(没有JWT(。
我能看到的唯一可以应用于控制器中的服务操作的属性是Authorize
属性。我已经考虑过使用该属性(或自定义属性(,但我遇到了问题。
Authorize
属性似乎无法更改返回的HTTP状态代码。在我的情况下,如果在没有有效JWT的情况下调用我的服务,我需要返回一个401 Http状态代码。
如何有条件地要求控制器中的服务操作要求身份验证并返回401
这有点奇怪,因为使用Authorize属性的授权失败返回的默认状态代码是401。它返回的状态代码是什么?
对于处理多个JWT令牌,您可能想看看这个答案:使用多个JWT-承载身份验证
基本上,您正在设置多个身份验证方案,并在设置中多次使用AddJwtBearer。然后,您可以创建多个Auth策略来覆盖每种需求组合,一个仅用于第一个JWT,一个用于第二个JWT以及一个用于同时需要两者时(共3个(。然后,只需将[Authorize(Policy = "PolicyName")]
属性添加到要保护的每个端点,具体取决于该端点的要求(一个或两个令牌(。对于不需要令牌的端点,只需将其更改为[AllowAnonymous]
属性即可。