【发布时间】:2019-01-24 15:11:25
【问题描述】:
我正在开发一个独立的 .Net Core API 目标框架 .Net Core 2.2。
身份验证方案是连接到我们的 ADFS 识别服务器的 JWTBearerTokens。
当我调用使用 [Authorize] 属性修饰的 API 端点时,我收到 401 Unauthorized 响应,这是预期的默认行为。
我接下来要做的不是让相同的调用返回 401,而是将状态码返回为 404。(我不想详细说明为什么 404。简单地说,我不想如果请求中未包含有效令牌,则表明端点存在)
在之前的 .Net Framework WebAPI 中,您可以创建自己的属性并覆盖 HandleUnauthorizedRequest 方法并返回您想要的状态代码。
我已经查看了有关基于策略的授权的文档,但没有尝试过该示例或尝试实施它。如果策略未执行,策略处理程序看起来更多地与处理(返回成功或失败)有关。我看不到任何地方可以在失败时返回不同的状态代码。因此,只有当我开始检查实际政策时,这才有意义。
有什么见解吗?
【问题讨论】:
-
这是毫无意义的尝试。无论如何,任何人都知道端点存在的唯一方法是它是否以某种方式记录在案。没有办法“浏览” API。必须在某处列出一些端点或文档,以便客户端知道端点存在。假设他们知道它存在,那么返回 404 只会使您的文档看起来像是错误的。更糟糕的是,它现在无法真正向客户提供有用的信息,即他们没有提供授权,从而阻止了仅仅犯了错误的有效客户知道如何纠正他们的错误。
-
401状态的存在是有原因的:让客户知道他们需要提供授权。
-
讨论为什么 404 不是真正的问题。只是想了解如何返回不同的状态代码。您的观点绝对有效,但也有一些内部政策和限制我也受到限制。
-
我的意思是,没有真正的好方法可以做你想做的事,因为这不是一开始就应该做的事情。你也许可以一起破解一些东西,虽然我不确定那会是什么样子,但反击更容易更好。作为开发人员,你的工作不是盲目地做任何事情。如果经理类型等知道事情是如何运作的,他们就不需要你了。而且,只是说某事是不可能的总是一种选择,即使现实是只有通过黑客才能实现。
-
请提及您的编程语言以获得更好的答案
标签: asp.net-core-webapi asp.net-core-2.2