如何解决如何有条件地要求.Net Core Web API中的身份验证
.Net Core 3.1 Web API服务可以使用两种不同类型的JWT进行身份验证。
我的控制器的服务操作有时需要同时存在一个或两个。有时,任何人都可以调用它们(没有JWT)。
我可以在控制器中应用于服务操作的唯一属性是Authorize
属性。我已经研究过使用该属性(或自定义属性),但是遇到了问题。
似乎Authorize
属性无法更改返回的HTTP状态代码。就我而言,如果在没有有效JWT的情况下调用我的服务,则需要返回401 Http状态代码。
如何有条件地要求控制器中的服务操作要求身份验证并返回401?
解决方法
这有点奇怪,因为授权失败使用Authorize属性返回的默认状态码是401。它返回什么状态码?
要处理多个JWT令牌,您可能需要查看以下答案:Use multiple JWT Bearer Authentication
基本上,您将设置多个身份验证方案,并在设置中多次使用AddJwtBearer。然后,您可以创建多个Auth策略来覆盖需求的每种组合,一个仅用于第一个JWT,一个用于第二个JWT,以及一个在同时需要两个时(总共3个)的一个。然后,根据该端点的要求(一个或两个令牌),将[Authorize(Policy = "PolicyName")]
属性添加到要保护的每个端点。对于不需要令牌的端点,只需将其更改为[AllowAnonymous]
属性即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。