我有一个场景,我们有一个Azure多租户应用程序。客户允许我们的服务与Azure AD对话,并使用授予我们的多租户应用程序的授权代码流从他们的Azure AD租户中搜索(用户/AD组)数据。
将Azure AD设置用户登录到我们的UI并尝试从他们的AAD租户中搜索用户/组。我们的服务使用授予多租户应用程序的授权来调用AAD。
现在,如果客户的AAD管理通过登录到AAD控制台来删除对我们AAD多租户应用程序的访问,那么当我们的服务试图调用AAD API来搜索用户时,AAD开始抛出http 403(禁止)。
对于这个特定的场景,应该将哪些http状态代码返回给UI?我们想通知用户这一点,以便他们可以恢复我们的多租户应用程序的授权。
我不认为返回http 4xx是个好主意。如果我们从UI预期中看到这不是客户端错误。
我认为这是某种服务器错误。我们的AAD连接服务因缺乏授权而中断。
请建议一个合理的http状态代码从5xx系列或4xx系列为本方案。
发布于 2019-11-14 18:43:34
状态代码的4xx (客户端错误)类表示客户端似乎出错了。除非响应HEAD请求,否则服务器应该发送一个表示,其中包含错误情况的解释、以及它是临时的还是永久性的。
有效载荷是向最终用户传达实际问题的主要方式。
HTTP状态代码是元数据;目标受众是参与消息交换的通用组件。在网络上,有效载荷是人类的,状态码是浏览器,缓存,蜘蛛等等。
在你的情况下,请求是可以的。特别是,客户端不能做任何事情来改善结果。所以4xx应该不在桌子上。
状态代码的5xx (服务器错误)类表示服务器知道它已经错误或无法执行请求的方法。
5xx类的状态代码比4xx类不那么具体(主要是因为其他组件无法采取纠正措施)。
您可以选择的实际选项是:
服务不可用很有趣,因为它定义了一系列重试语义;您可以与通用组件通信,估计问题何时修复,然后这些组件可以判断如何处理这些信息。
503 (服务不可用)状态代码表示服务器目前由于临时重载或计划维护而无法处理请求,这很可能在延迟之后得到缓解。
因此,如果你认为你可以在事情恢复之前估计延迟,那么503可能是有意义的。
500 (内部服务器错误)状态代码表示服务器遇到了无法满足请求的意外情况。
这是一个非常令人满意的选择。“我们现在出乎意料地崩溃了”。
同样,5xx响应的有效负载可以用于向客户端传递更具体的语义。
发布于 2019-11-14 16:37:14
你应该和4xx保持联系。
HTTP 403是一种标准的HTTP状态代码,由HTTP服务器与客户端通信,以指示客户端出于某种原因禁止访问所请求的(有效的)网址。
发布于 2019-11-14 17:04:08
最后,您的应用程序达到不允许当前用户执行某些操作的状态。根据您的普通用户的技术熟练程度,您可以或多或少地向她提供技术信息。因为你似乎能够定义什么是特别的错误,你有机会告诉用户关于它和她应该如何反应。在我看来,不需要HTTP代码。将它提供给用户并没有真正的好处(除了她是技术熟练的)。因此,我会在UI中给出一个很好的解释(可能是一个小字体的文本,它保存着HTTP代码)。但这只是我的看法,我会怎么做。
最后,这也取决于您使用软件实现的业务流程。因此,,我建议您向负责软件背后业务部分的人员(如产品负责人)提出您的问题。如果你有这样的想法的话,问问你的用户体验设计师也是个好主意。
https://stackoverflow.com/questions/58861584
复制相似问题