GrantForge 对业务应用有两种身份:
- 授权服务器(OAuth 2.1 / OpenID Connect):用户在 GrantForge 登录,应用拿到访问令牌与 ID 令牌。
- 权限中心:应用用同一个令牌询问 GrantForge,这个用户在本应用里有哪些角色、资源(菜单、页面、按钮)、API 权限以及数据范围。
概念对照
| 概念 | 在哪里配置 | 说明 |
|---|---|---|
| 应用 | 平台管理 → 资源目录 | 一个业务系统,例如 shop |
| 资源 | 资源目录中应用的资源树 | 模块、菜单、页面、按钮、API。页面与按钮控制界面,API 资源就是 API 权限编码(例如 orders.read) |
| 客户端 | 资源目录 → 应用的“OAuth 客户端” | 应用登录用户、获取令牌的身份。浏览器应用用公开客户端,服务端应用用机密客户端 |
| scope | 客户端设置 | openid、profile、email 用于登录;permissions 允许令牌查询权限;catalog 允许应用以自身身份声明数据实体 |
| 角色与授权 | 访问控制 → 角色管理 | 把应用的资源授给角色,再把角色分配给用户、组、部门或岗位 |
| 数据策略 | 角色 → 数据权限 | 应用声明的实体(<应用编码>:<实体>)与控制台自身的实体一样配置:全部、本租户、本人、部门、指定部门或条件 |
租户管理员(持有系统角色的人)可以把业务应用的任何资源授给本租户的角色;控制台自身的权限仍然只能授出自己拥有的部分。
流程
sequenceDiagram participant B as 浏览器 participant A as 业务应用 participant G as GrantForge B->>G: /oauth2/authorize(PKCE) G-->>B: 未登录时转到控制台登录页,登录后带回授权请求 G-->>B: 回到应用的回调地址,带 code B->>G: /oauth2/token(code + code_verifier) G-->>B: 访问令牌、ID 令牌 B->>G: /api/v1/open/me/authorization(Bearer) G-->>B: 角色、资源、API 权限(ETag) B->>A: 调用应用 API(Bearer) A->>G: /api/v1/open/me/authorization、/data-access(同一个令牌) A-->>B: 只返回用户可用的数据
接入步骤
- 在 平台管理 → 资源目录 新建应用,建好页面、按钮与 API 资源。
- 为应用注册客户端:浏览器应用选“公开”,服务端应用选“机密”;回调地址填应用的登录回调;scope 至少选
openid与permissions。机密客户端的密钥只显示一次。 - 在 访问控制 → 角色管理 建角色、授权、分配给用户。
- 应用接入 SDK:Java 见 Java SDK,浏览器见 JavaScript SDK,协议细节见 OAuth 2.1 与 OpenID Connect 和 权限查询开放 API。
仓库里的 samples/ 有两个完整示例(商店与笔记),并由端到端测试覆盖,见 示例应用。
