我正在工作的新网站具有以下组件:
- AngularJS/HTML5 前端
- 支持前端的 Web API 后端
- OAuth 服务器 - 对用户进行身份验证并提供令牌
未经身份验证的用户的工作流:
- 视图前端,调用 Web API 以确定是否经过身份验证
- 如果未经过身份验证,用户将被重定向到 OAuth 服务器
- 身份验证成功后,浏览器将使用身份验证代码重定向回网站
- 身份验证代码发送到 Web API
- Web API 逻辑从 OAuth 服务器请求访问令牌
- Cookie 用于将令牌与用户相关联
- 其他请求发送用于授权用户的 cookie。
我的问题是我应该为步骤 1 的 HTTP 状态代码发送什么?通常,您发送 401 不是未经授权的,但那是如果您使用的是 HTTP 身份验证。由于身份验证由不同的服务器处理,因此这没有意义。403 似乎也不正确,因为它暗示状态不会改变。
我应该只使用通用 400 还是自定义 400.X 代码?
尽管在您的情况下发送HTTP 401 Unauthorized
作为响应没有错,但更好的选择是发送HTTP 302 Found
,这意味着当用户尝试访问前端视图时,在这种情况下适用的资源(OAuth Server URL(是在其他地方找到的。
您可以在响应的 Location
标头中提及 OAuth 服务器 URL,以便客户端将未经身份验证的用户重定向到预期位置。
HTTP 302 Found
Location: https://oath-server-url.com