# g2rain-iam(身份认证与授权)

g2rain-iam 是统一 身份认证与授权 微服务:浏览器侧提供登录、注册、授权确认等 Thymeleaf 页面;协议侧提供类 OAuth2 的授权码换令牌、/auth/token 发放 JWT(结合 DPoP);通过 OpenFeign 调用 g2rain-basis 完成通行证、用户、应用与 登录态(login_token) 持久化。

源码仓库github.com/g2rain/g2rain-iam (opens new window)

# 核心能力

能力 说明
OAuth2 式授权码流程 /auth/authorize/auth/authorize_selected/auth/token
JWT + DPoP Nimbus JOSE JWT;TokenKeyManager + Nacos g2rain-token-keypair.yml
会话 Redis 维护登录会话(AuthService / RedisKeyRule
登录态落库 发牌成功后 TokenService.saveLoginToken → basis /login_token/save
钉钉登录 登录页 Tab + 扫码 QR(/auth/dingtalk/qr/bootstrap 等)
国际化 ErrorMessageStorage 按 locale 解析错误文案(可对接 infra i18n)
页面 Thymeleaf 模板:login.htmlregister.html

本服务为自研控制器组合实现,非 Spring Authorization Server 默认形态;对接字段以代码与模板为准。

# 钉钉扫码 / OAuth 登录

IAM 通过 DingTalkIdpAuthServiceIdpAuthService 实现)与 basis passport_idp_binding 协作:

  • 配置前缀:g2rain.iam.dingtalkDingTalkIamProperties
  • 登录页在应用配置了钉钉绑定模式时展示 「账号密码 / 钉钉登录」 双 Tab
  • 扫码流程:/auth/dingtalk/qr/bootstrap 初始化二维码容器,回调 /auth/dingtalk/callback
  • 未绑定通行证时返回 DINGTALK_STREAM_USER_NOT_BOUND 等业务错误码
  • 已登录用户可绑定钉钉:/auth/dingtalk/bind/passport/callback

身份源扩展:basis IdpType 已预留 FEISHU(飞书)WECHAT_WORK(企业微信);IAM 侧可按同一 IdpAuthService 路由扩展。

# 登录态记录(与 basis 协作)

每次成功发放 JWT(含刷新、切换身份等路径),TokenService 组装 LoginTokenDto 并调用 basis:

  • 记录应用编码、会话类型、组织/用户/通行证信息、管理员标志等
  • 供运维审计、会话查询及后续令牌上下文重建

详见 g2rain-basis · 登录态模块

# 国际化

  • IAM 全局异常与页面错误使用 ErrorMessageStorage,支持按 完整 locale语言前缀 查找(如 zh_CN
  • 请求 Accept-Language 可参与文案选择(与网关、业务服务约定一致)
  • 错误文案数据源可与 g2rain-infra i18n_message 运维配置联动

# 主要 HTTP 路径

方法 路径 说明
GET /auth/authorize 授权入口
POST /auth/login 账号密码登录
POST /auth/token 换票/刷新(需 DPoP 等校验)
GET/POST /auth/dingtalk/* 钉钉 OAuth / 扫码 / 绑定
POST /auth/passport_register 通行证注册
GET /auth/captcha/register 注册验证码

# 与 g2rain-basis 的分工

IAM 不直接承载 组织/用户/通行证表模型,而是通过 Feign(PassportClientUserClientLoginTokenClient 等)访问 basis API,专注 认证体验与令牌发放

# 环境要求

  • JDK 25+、Redis、Nacos、可访问的 g2rain-basis
  • 默认端口 8082SERVER_PORT
git clone https://github.com/g2rain/g2rain-iam.git
mvn clean package -DskipTests
java -jar target/g2rain-iam-*.jar

JWT 公私钥等敏感配置请放在 Nacos g2rain-token-keypair.yml 或密钥管理系统,勿写入公开仓库。

# 相关文档