跳转到内容

操作被拒绝,因为禁止

Symptom

您已登录 — 读取操作正常 — 但某个操作返回 403。或者每个请求都返回 401,仪表板将您重定向到登录页面。这是两个不同的问题,区别在于状态码。

Diagnose

  1. 401 还是 403? 401 表示平台不知道您是谁:令牌缺失、格式错误或已过期。403 表示平台确切知道您是谁,但答案仍然是否定的。
  2. 对于来自 API 的 401 错误: 检查请求是否携带了 Authorization: Bearer <token>,并且令牌是否未过期。odysseus auth whoami 和 odysseus auth status 都会回答此问题。
  3. 对于 403 错误:您正在以哪个角色运行? 运行和构建是故意分开的权限——请参阅代理程序主体无法执行的操作,该文档为自动调用者说明了相同的分离。
  4. 资源是否在您的租户中? 每条记录都只属于一个租户,访问另一个租户记录的请求会被拒绝,而不是返回空结果。这种拒绝看起来像是一个权限问题,并且是一个隔离边界——请参阅多租户与隔离。
Odysseus 仪表板中的用户界面,列出了每个账户及其所拥有的角色和所属的租户——该视图用于判断一个被拒绝的操作是因为调用者的身份,还是因为他们未登录。

Resolve

  • 401: 请重新登录,或刷新令牌。 odysseus auth login 会重新签发一个。
  • 403,针对您的角色未携带的操作: 请向您租户的管理员申请相应权限,并说明具体的操作而非角色——角色之间的区别在于它们能做什么,而非等级高低。
  • 403,针对另一个租户的记录: 此处无法修复;该记录不属于您。

Prevent

为自动化调用者提供一个仅拥有其工作所需权限的主体。一个同时拥有构建权限和运行权限的主体会悄然破坏权限分离,且没有任何报告机制。