• IAM服务


    服务简码 HIAM

    默认端口 8030

    默认路由 /iam/**

    组件编码 hzero-iam

    简介

    .1 概述

    权限管理服务,平台统一的权限体系架构

    .2 组件坐标

    <dependency>
        <groupId>org.hzero</groupId>
        <artifactId>hzero-iam</artifactId>
        <version>${hzero.service.version}</version>
    </dependency>
    
    <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服务,便于操作)