读过了 concepts/access-token-vs-id-token 并了解:
- id_token 用于同自建应用的 backend 进行通信
- access_token 用于同 resource server 进行通信
但是,如果我的 backend 和 resouce server 同一个呢?
假设我的系统有一个 frontend 和一组 backend。
- frontend 是一个平凡的 SPA 应用
- backend 暴露了 grpc,restful,graphql 等一系列 endpoints。所有的 endpoints 都是同时暴露给 frontend 和其他想用 API 的用户的
- backend 中的特定 actions 是与 token sub 相关的。比如,对于不同的 token.sub,因为 read permission 的问题,他们能获取到的 entities 是不同的,某些 entities 对某些 sub 是不可访问的,需要被忽略
- 这对 access_token 和 id_token 的 sub 都适用
- backend 中的特定 actions 是与 token sub 相关的。比如,对于不同的 token.sub,因为 read permission 的问题,他们能获取到的 entities 是不同的,某些 entities 对某些 sub 是不可访问的,需要被忽略
- backend 在与 frontend 交互时,应当使用 id_token,且不考虑 consent workflow;但在与通过 API 的用户交互时,应当使用 access_token 并考虑 scope(只有 scope 中的 action 可以使用,其他的 actions 会被 backend 驳回)
- 所有 auth 相关的操作仅用标准 oidc endpoints(node-openid-client 和 oidc-client-ts 之类的),不用特定平台的特定 sdk
所以想问的是:
- 这个设计合理吗?一个同时兼容 id_token 和 access_token 的 backend 是可行的吗?
- 因为不想与特定平台绑定得太紧,所以我的想法是把 user 实体和 role 放在 backend,仅仅把 consent workflow 需要的 scope/permission 放在 authing。这个设计是可行的吗?