# 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.html、register.html 等 |
本服务为自研控制器组合实现,非 Spring Authorization Server 默认形态;对接字段以代码与模板为准。
# 钉钉扫码 / OAuth 登录
IAM 通过 DingTalkIdpAuthService(IdpAuthService 实现)与 basis passport_idp_binding 协作:
- 配置前缀:
g2rain.iam.dingtalk(DingTalkIamProperties) - 登录页在应用配置了钉钉绑定模式时展示 「账号密码 / 钉钉登录」 双 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:
- 记录应用编码、会话类型、组织/用户/通行证信息、管理员标志等
- 供运维审计、会话查询及后续令牌上下文重建
# 国际化
- 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(PassportClient、UserClient、LoginTokenClient 等)访问 basis API,专注 认证体验与令牌发放。
# 环境要求
- JDK 25+、Redis、Nacos、可访问的 g2rain-basis
- 默认端口 8082(
SERVER_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 或密钥管理系统,勿写入公开仓库。