假设OpenID Connect隐式流主要由单页面应用程序(SPA)使用,可能首先通过使用AJAX调用来完成对后端/ API的访问,不通过加载SPA本身。
现在,如果API检测到没有令牌发送请求,它应该如何响应?
恕我直言,使用重定向进行响应没有多大意义,因为这只会导致重定向AJAX请求,而不是整个浏览器窗口(这是必要的)。
那么,回复是否有401
罚款?或者还有另一种(更好的)做法?假设一个401
是好的,服务器应该以某种方式指出要使用哪个身份提供者,或者这完全取决于客户端,后端假定客户端知道它信任哪个身份提供者?
答案 0 :(得分:1)
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,但是现在需要指出客户端应该如何与资源服务器进行交互(例如文档)。