IAM服务
服务简码
HIAM
默认端口
8030
默认路由
/iam/**
组件编码
hzero-iam
简介
.1 概述
权限管理服务,平台统一的权限体系架构
.2 组件坐标
- OP 版本
<dependency>
<groupId>org.hzero</groupId>
<artifactId>hzero-iam</artifactId>
<version>${hzero.service.version}</version>
</dependency>
- SaaS 版本
<dependency>
<groupId>org.hzero</groupId>
<artifactId>hzero-iam-saas</artifactId>
<version>${hzero.service.version}</version>
</dependency>
.3 主要功能
- 角色管理
- 菜单管理
- 帐户管理
- 用户组管理
- 租户管理
- 权限刷新
- 单据权限管理
服务配置
hzero:
data:
permission:
# 是否启用数据权限屏蔽
enabled: true
# 数据库所有者模式,例如 SqlServer 下的 dbo/guest
db-owner:
## 发送验证码相关
send-message:
# 修改密码成功是否发送消息
send-modify-password-success: true
# 修改密码成功消息代码
modify-password-success: HIAM.MODIFY_PASSWORD_SUCCESS
# 创建用户是否发送消息
send-create-user: true
# 创建用户成功消息代码
create-user: HIAM.CREATE_USER
# 用户注册消息代码
register-user: HIAM.REGISTER_USER
# 找回密码消息代码
find-password: HIAM.FIND_PASSWORD
# 验证码手机消息代码
validate-phone: HIAM.VALIDATE_PHONE
# 验证码邮箱消息代码
validate-email: HIAM.VALIDATE_EMAIL
# 修改手机消息代码
modify-phone: HIAM.MODIFY_PHONE
# 修改邮箱消息代码
modify-email: HIAM.MODIFY_EMAIL
## 验证码配置
captcha:
sms:
# 短信验证码过期时间(分)
expire: 5
# 验证码发送间隔时间(秒)
interval: 60
# 同一个账号发送次数限制
limit-time: 10
# 次数限制的间隔时间(时)
limit-interval: 12
enable: true
# 测试时禁用验证码功能
# 设置为 true 时,则不会真正发送验证码,一般在压测时开启此配置
test-disable: false
## 服务启动数据初始化相关
iam:
permission:
# 是否自动刷新服务权限
parse-permission: ${HZERO_PERMISSION_PARSE_PERMISSION:true}
# 不需要刷新权限的服务
skip-services: ${HZERO_PERMISSION_SKIP_PARSE_SERVICES:register,gateway,swagger}
# 刷新权限时是否清除旧的权限
clean-permission: ${HZERO_PERMISSION_CLEAN_PERMISSION:false}
init-cache:
# 是否初始化三方登陆方式到缓存
open-login-way: ${HZERO_START_INIT_OPEN_LOGIN_WAY:true}
# 是否初始化密码策略到缓存
password-policy: ${HZERO_START_INIT_PASSWORD_POPLICY:true}
# 是否初始化用户到缓存
user: ${HZERO_START_INIT_USER:true}
# 是否初始化缓存LDAP
ldap: ${HZERO_START_INIT_LDAP:true}
# 是否初始化缓存客户端
client: ${HZERO_START_INIT_CLIENT:true}
# 是否初始化字段权限
field-permission: ${HZERO_START_INIT_FIELD_PERMISSION:true}
import:
# 初始化导入表,第一次启动服务的时候需开启此设置
init-table: false
tenant:
init:
# 是否开启拦截,只有开启才会拦截租户的新增和更新
aspect:
enabled: false
field-permission:
# 是否启用字段权限
enable: true
sso:
# 启用二级域名单点登录
enabled: ${HZERO_OAUTH_SSO_ENABLED:true}
provider:
# cas key
key: ${HZERO_OAUTH_SSO_PROVIDER_KEY:hzero}
service:
# Cas 客户端地址
baseUrl: ${HZERO_OAUTH_SSO_SERVICE_BASE_URL:http://dev.hzero.org:8080/oauth}
# SAML 相关配置
saml:
entity_id: hzero:org:sp
passphrase: secret
private_key: MIIEvQIBADANB.........
certificate: MIIDEzCCAfugA.........
接口权限自动刷新机制
IAM 服务保存了接口权限信息,一般情况下,(按照HZERO规范生成的)新服务注册到注册中心后, 系统会自动从该服务拉取该服务接口权限信息,并通过IAM权限刷新接口保存到数据库和缓存中, 这时新服务的api在网关的鉴权(网关从redis中获取权限信息)才能通过。
这里HZERO为用户做了三件事:
- 自动监听服务注册事件,并从新服务拉取接口权限信息(该工作由hzero-admin服务完成)
- hzero-admin服务通过远程调用通知hzero-iam服务完成权限刷新工作
- hzero-iam从新服务拉取权限接口信息,并保存到数据库和缓存
所以如果出现这样到情况,新服务注册后,接口权限没有刷新到IAM,导致网关鉴权失败,报错permission mismatch。 则原因可能是:
- hzero-admin服务不可用,无法监听到服务注册事件
- hzero-iam服务不可用或hzero-admin与hzero-iam网络不通或网络抖动,hzero-admin远程调用hzero-iam失败
- 新服务不符合HZERO规范
在hzero-admin、hzero-iam均可用,且网络可达的情况下,依然有很小的概率由于网络抖动原因而调用失败, 这时需要手动调用hzero-iam服务的权限刷新接口或hzero-admin服务的权限刷新接口,可参考 IAM 特殊接口介绍
ps.推荐使用hzero-admin服务的接口(路由刷新、swagger刷新等管理功能集中在hzero-admin服务,便于操作)