我的.Net Core3.1WebAPI服务可以使用两种不同类型的JWT进行身份验证。
我的控制器的服务操作有时要求其中一个或两者都存在。有时,任何人都可以调用它们(没有任何一个JWT)。
我看到可以应用于控制器中的服务操作的唯一属性是Authorize
属性。我已经研究过该属性(或自定义属性)的使用情况,但我遇到了一些问题。
Authorize
属性似乎无法更改返回的HTTP代码。在我的例子中,如果没有有效的JWT调用我的服务,我需要返回一个401 Http状态代码。
如何有条件地要求控制器中的服务操作要求身份验证并返回401?
发布于 2020-08-20 09:35:17
这有点奇怪,因为使用授权属性的授权失败返回的默认状态代码是401。它返回的是什么状态代码?
为了处理多个JWT令牌,您可能需要查看以下答案:Use multiple JWT Bearer Authentication
基本上,您正在设置多个身份验证方案,并在安装过程中多次使用AddJwtBearer。然后,您可以创建多个Auth策略,以涵盖每个需求组合,一个用于第一个JWT,一个用于第二个JWT,一个用于当两者一起需要时(3个总计)。然后,只需根据要保护的每个端点(一个或两个标记)的需求,将[Authorize(Policy = "PolicyName")]
属性添加到每个端点。对于不需要令牌的端点,只需将其更改为[AllowAnonymous]
属性即可。
https://stackoverflow.com/questions/63494141
复制相似问题