我正在编写一个小型应用程序,它公开了一个简单的REST-ish HTTP API。由于缺乏授权,我一直试图决定如何发出失败信号。
该应用程序没有用于身份验证的API,而是取决于是否存在包含客户端通过其他服务获取的会话令牌的cookie。该应用程序验证会话并使用通过验证过程获得的身份执行特定于应用程序的授权。客户端无法直接对此应用进行身份验证。
我的问题是,用于拒绝未授权请求的明显HTTP状态代码“401 Unauthorized”是根据“WWW-Authenticate”标头指定的。请参阅rfc2616 sec 10.4.2。
响应必须包括一个 WWW-Authenticate标题字段(部分 14.47)包含适用于所请求资源的质询。
我无法相信这是一个不寻常的问题。简单地重载401以包含更多一般用途是否常见?浏览器弹出auth / e对话框怎么样(顺便说一句,我在测试中没有看到,所以也许POST不会发生)?
底线:在这种情况下使用401是否可以,或者是否有更好的解决方案?
答案 0 :(得分:34)
通常情况下,如果客户端可以验证并解决问题,您将发送401,但由于您没有提供在API中进行身份验证的方法,我建议您返回403错误(禁止)。这不需要标头,并将向客户端指示它无法访问该服务。
答案 1 :(得分:9)
返回这样的内容:
HTTP/1.1 401 Unauthorized
Location: https://example.com/auth-app/login