Azure 在服务器到第三方身份验证失败的情况下返回哪个http状态代码

Azure 在服务器到第三方身份验证失败的情况下返回哪个http状态代码,azure,rest,http,Azure,Rest,Http,我有一个场景,我们有一个Azure多租户应用程序。客户授予我们的服务与Azure AD对话的权限,并使用授予我们的多租户应用程序的授权代码流从他们的Azure AD租户中搜索(用户/广告组)数据 发布Azure AD安装用户登录到我们的UI,并尝试从其AAD租户搜索用户/组。我们的服务使用授予多租户应用程序的授权调用AAD API 现在,如果客户的AAD管理员通过登录到他们的AAD控制台来删除对我们的AAD多租户应用程序的访问,那么当我们的服务尝试调用AAD API来搜索用户时,AAD将开始抛出

我有一个场景,我们有一个Azure多租户应用程序。客户授予我们的服务与Azure AD对话的权限,并使用授予我们的多租户应用程序的授权代码流从他们的Azure AD租户中搜索(用户/广告组)数据

发布Azure AD安装用户登录到我们的UI,并尝试从其AAD租户搜索用户/组。我们的服务使用授予多租户应用程序的授权调用AAD API

现在,如果客户的AAD管理员通过登录到他们的AAD控制台来删除对我们的AAD多租户应用程序的访问,那么当我们的服务尝试调用AAD API来搜索用户时,AAD将开始抛出http 403(禁止)

对于这个特定场景,应该向UI返回什么http状态代码? 我们想通知用户这一点,以便他们能够恢复我们的多租户应用程序的授权

我认为返回http 4xx不是一个好主意。如果我们从UI中看到,这不是客户端错误

我认为这是某种服务器错误。由于缺乏授权,我们对AAD的服务连接中断


请在此场景中从5xx系列或4xx系列中建议一个合理的http状态代码。

您应该使用4xx

HTTP 403是一个标准的HTTP状态代码,通过 HTTP服务器,以指示用户对请求的(有效)URL的访问 由于某种原因,客户被禁止


最后,您的应用程序达到了当前用户不允许执行某些操作的状态。根据您的普通用户的技术熟练程度,您可以向她提供或多或少的技术信息。因为你似乎能够定义什么是特别的错误,你有机会告诉用户它和她应该如何反应。在我看来,没有HTTP代码是必要的。将它提供给用户并没有什么好处(除非她技术熟练)。因此,我会在UI中给出一个很好的解释(可能还有一个小字体的文本,其中包含HTTP代码)。但这只是我的意见,我会怎么做

最后,这还取决于您使用软件实现的业务流程。因此,我建议您向负责软件背后业务部分的人员(如产品所有者)提问。如果你有一些想法,询问你的用户体验设计师也是一个好主意

4xx(客户端错误)类状态代码表示客户端 似乎犯了错误。除非在响应HEAD请求时 服务器应发送一个表示,其中包含对 错误情况,以及它是临时的还是永久的 条件

有效载荷是向最终用户传达实际问题的主要方式

HTTP状态码是元数据;目标受众是参与消息交换的通用组件。在网络上,有效载荷是给人类的;状态代码用于浏览器、缓存、爬行器等

在你的情况下,请求是可以的。特别是,客户无法改善结果。所以4xx应该不在桌子上

5xx(服务器错误)类状态代码表示服务器 意识到自己犯了错误或无法执行 请求的方法

5xx类状态代码比4xx类具体得多(主要是因为其他组件无法采取纠正措施)

你可以选择的实物期权是

  • 500内部服务器错误
  • 503服务不可用
服务不可用的有趣之处在于它在定义语义后有一系列重试;您可以向通用组件传达问题何时可以解决的估计,然后这些组件可以判断如何处理这些信息

503(服务不可用)状态代码表示服务器 由于临时过载,当前无法处理该请求 或定期维护,经过一段时间后可能会有所缓解 耽搁

因此,如果你认为你可以在事情重新开始之前估计延迟,那么503可能是有意义的

500(内部服务器错误)状态代码表示服务器 遇到意外情况,使其无法实现 请求

这是一个完全令人满意的选择。“我们现在出人意料地崩溃了”

同样,5xx响应的有效负载可用于向客户机传达更具体的语义