OpenID Connect 隐式流:使用重定向响应?

OpenID Connect implicit flow: Respond using a redirect?

假设 OpenID Connect 隐式流主要由单页应用程序 (SPA) 使用,可能第一次访问 backend/API 是通过使用 AJAX 调用完成的,不是通过加载SPA本身。

现在,如果 API 检测到请求是在没有令牌的情况下发送的,它应该如何响应?

恕我直言,用重定向响应没有太大意义,因为这只会导致 AJAX 请求被重定向,而不是整个浏览器 window(这是必要的)。

那么,用 401 回应可以吗?还是有另一种(更好的)方法来做什么?假设 401 没问题,服务器是否应该以某种方式指示要使用哪个身份提供者,或者这完全取决于客户端,并且后端假定客户端知道它信任哪个身份提供者?

RFC6749 没有说明应如何设计响应。

但是,由于客户端需要 API 响应,您的资源服务器应该发送带有适当 HTTP 代码和响应正文的 API 响应。

如果资源服务器因为令牌过期或无效而拒绝请求,则响应代码应为400。 如果访问令牌未在请求范围内颁发,或者资源所有者无权使用该资源,则代码应为 403。 如果未找到令牌,则代码应为 401。

正文可能类似于规范中描述的错误响应:

HTTP/1.1 403 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
    "error":"insufficient_scope",
    "error_description":"The scope 'WRITE' is required.",
    "error_uri":"https%3A%2F%2Fwww.example.com%2Fdoc%2Ferror403%2Finsufficient_scope"
}

关于指示使用哪个 IdP 的方式,我知道 specification is being written,但目前由您来指示客户端应如何与您的资源服务器交互(例如文档)。