Skip to content
开发与集成人员当前实现 · 2026-10内容核验 2026-10-09

IAM 与 Gateway 接入 ​

接入顺序 ​

  1. 为 Web 注册独立 SPA 公共客户端,使用 Authorization Code + PKCE S256。
  2. 精确登记每个环境的回调 URI,并在 Gateway 配置实际 Web Origin。
  3. 实现 state 校验、授权码交换、令牌刷新与统一退出。
  4. 后端配置 Resource Server 验证 issuer、JWK 签名与令牌有效期。
  5. 声明应用权限与角色,在每个租户业务查询中施加租户与数据范围条件。
  6. 为 Gateway 添加业务路由,并验证非授权与跨租户请求被拒绝。

SPA 登录 ​

浏览器不持有 Client Secret,不自行收集或校验企业密码。参考当前应用的 auth.ts 和认证回调实现;授权事务只能使用一次,站内返回地址必须受限。

ts
const body = new URLSearchParams({
  grant_type: 'authorization_code',
  client_id: 'edma-example-web',
  code,
  redirect_uri: `${window.location.origin}/auth/callback`,
  code_verifier: verifier,
})
const response = await fetch(`${gatewayUrl}/oauth2/token`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body,
})

上例只展示授权码交换;code 必须来自已通过 state 校验的当前回调,verifier 来自本次授权事务。不要把令牌或 verifier 写进日志。

后端验证 ​

yaml
spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: ${EDMA_IAM_ISSUER:http://localhost:6100}
          jwk-set-uri: ${EDMA_IAM_INTERNAL_URL:http://localhost:6112}/oauth2/jwks

Spring Security 的 JWT 校验只是身份基础;还需按当前应用规则映射业务权限、校验授权版本、角色数据范围和对象状态。不能因前端隐藏按钮就省略后端授权。

tenant_id 来自已验证 JWT。Gateway 的 X-Edma-* 身份头仅作辅助上下文,不能单独成为授权依据。

服务间调用 ​

使用独立 SERVICE 客户端和 Client Credentials。对租户业务接口,客户端应被显式授予对应 tenant:<UUID> scope,每次令牌请求选择一个租户;同时校验服务 scope、客户端归属与 grant type。

需要用户权限的文件访问等场景转发原用户令牌,不用强权限服务令牌替代用户授权。

验收 ​

检查精确回调、state 一次性、刷新失败降级、统一退出、越权动作、伪造身份头、错误租户和失效令牌。生产签名密钥与轮换应按当前 IAM 配置和部署方案确认。

认证参考 · 平台边界 · 客户端深度解析

继续查阅

遇到登录、权限或操作问题,可先查阅常见问题。

查看常见问题

EDMA · 企业数字化管理应用