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
  ## 服务启动数据初始化相关
  start-init:
    # 是否初始化三方登陆方式到缓存
    open-login-way: true
    # 是否初始化密码策略到缓存
    password-policy: true
    # 是否初始化用户到缓存
    user: true
  import:
    # 初始化导入表,第一次启动服务的时候需开启此设置
    init-table: false
  tenant:
    init:
      # 是否开启拦截,只有开启才会拦截租户的新增和更新
      aspect:
        enabled: false
  field-permission:
    # 是否启用字段权限
    enable: true
  ## 刷新权限相关
  permission:
    # 是否自动刷新服务权限
    parse-permission: true
    # 不需要刷新权限的服务
    skip-parse-services: register, gateway, oauth, swagger
    # 刷新权限时是否清除旧的权限
    clean-permission: false
  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.........
  password:
    # 密码加密公钥
    public-key: ${HZERO_OAUTH_PASSWORD_PUBLIC_KEY:MFwwDQYJKo.......}
    # 密码加密私钥
    private-key: ${HZERO_OAUTH_PASSWORD_PRIVATE_KEY:MIIBVQI........}  
接口权限自动刷新机制
IAM 服务保存了接口权限信息,一般情况下,(按照HZERO规范生成的)新服务注册到注册中心后, 系统会自动从该服务拉取该服务接口权限信息,并通过IAM权限刷新接口保存到数据库和缓存中, 这时新服务的api在网关的鉴权(网关从redis中获取权限信息)才能通过。
这里HZERO为用户做了三件事: 1. 自动监听服务注册事件,并从新服务拉取接口权限信息(该工作由hzero-admin服务完成) 2. hzero-admin服务通过远程调用通知hzero-iam服务完成权限刷新工作 3. hzero-iam从新服务拉取权限接口信息,并保存到数据库和缓存
所以如果出现这样到情况,新服务注册后,接口权限没有刷新到IAM,导致网关鉴权失败,报错permission mismatch。 则原因可能是: 1. hzero-admin服务不可用,无法监听到服务注册事件 2. hzero-iam服务不可用或hzero-admin与hzero-iam网络不通或网络抖动,hzero-admin远程调用hzero-iam失败 3. 新服务不符合HZERO规范
在hzero-admin、hzero-iam均可用,且网络可达的情况下,依然有很小的概率由于网络抖动原因而调用失败, 这时需要手动调用hzero-iam服务的权限刷新接口或hzero-admin服务的权限刷新接口,可参考 IAM 特殊接口介绍
ps.推荐使用hzero-admin服务的接口(路由刷新、swagger刷新等管理功能集中在hzero-admin服务,便于操作)