做淘宝客要有网站吗,广州搜狗快速排名原,关于官方网站建设情况的汇报,襄樊做网站一、集成平台是什么#xff1f;#xff08;小白秒懂版#xff09;1.1 简介想象一下#xff1a;医院里有挂号处、诊室、药房三个地方。传统方式#xff1a;你要先去挂号处拿号 → 自己找诊室 → 自己找药房#xff08;容易迷路#xff09;集成平台方式#xff1a;你只告…一、集成平台是什么小白秒懂版1.1 简介想象一下医院里有挂号处、诊室、药房三个地方。传统方式你要先去挂号处拿号 → 自己找诊室 → 自己找药房容易迷路集成平台方式你只告诉前台集成平台需求 → 前台带你去每个地方安全又省心应用集成平台充当认证中心和授权中心协助系统间安全传递业务参数。应用集成平台只做桥梁不替代各系统自己的功能一句话总结集成平台 系统间的前台服务员帮你安全地从A系统走到B系统1.2 安全机制Token认证 所有接口调用都需要有效的TokenSM4加密 数据传输使用SM4加密保护防重复请求 使用Redisson分布式锁防止重复请求黑名单验证 系统/IP级别的黑名单验证参数验证 严格的参数格式和有效性验证1.3 技术实现关键点Redis缓存 Token5小时、Ticket300秒、会话ID等缓存Kafka消息 使用主题 IAP_TOPIC_${servCode} 进行消息广播分布式锁 Redisson锁防止重复请求事务管理 Transactional注解确保数据一致性异常处理 统一的异常处理机制二、集成平台能做什么三大场景场景适用情况例子需要哪些接口1. 页面重定向需要浏览器跳转到另一个系统页面从挂号系统跳转到互联网医院问诊页申请Token 申请授权码A系统地址重定向 认证授权B系统校验授权码2. HTTP API调用需要后台获取数据用户无感互联网医院调用挂号系统的科室列表申请Token 服务调用3. 消息广播需要通知多个系统同一件事挂号系统发布新号源通知所有相关系统申请Token 发布消息 确认消息✅记住这个判断法有页面跳转 → 用场景1需要后台取数据 → 用场景2要群发通知 → 用场景3绝不混用2.1 核心组件IapRuntimeController.java 核心运行时控制器处理所有接口请求服务层 实现业务逻辑订阅验证、token管理等数据访问层 使用MyBatis-Plus操作数据库缓存层 Redis用于token、ticket等缓存消息队列 Kafka用于消息广播2.2 主要接口接口地址功能描述请求方法/interface/v1/token申请访问令牌POST/interface/v1/preauth页面重定向预授权申请授权码POST/interface/v1/authentication页面重定向认证认证授权POST/runtime/v1/**服务调用POST/interface/v1/publish/message消息广播发布POST三、前期准备必须知道的基础知识3.1 系统编码表— 每个系统都有身份证号系统名称编码你的身份挂号平台100如果你是挂号系统记下100互联网医院101如果你是互联网医院记下101百度灵医901常见能力系统支付宝902常见能力系统集成平台999所有请求都要知道它护理平台102其他业务系统重要每次调用接口请求头必须携带你的系统编码3.2 通信规则所有数据都加密使用SM4加密算法像给信件加密码锁请求格式{ param: 加密后的业务数据 }响应格式{ code: 200, message: 成功, data: 加密后的返回数据 }3.3安全要求每个请求必须做到在请求头写入systemCode你的系统编码生成24位唯一messageId不能重复在加密的param中再次写入相同的messageId除Token接口外其他接口必须携带token参数四、三大场景详细操作指南带示例场景1页面重定向从A系统跳到B系统典型业务挂号系统(100) → 跳转到 互联网医院(101)必须接口/iap/interface/token /iap/interface/v1/preauth /iap/interface/v1/authentication┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 系统B │ │ IAP平台 │ │ 系统A │ └─────┬───────┘ └─────┬───────┘ └─────┬───────┘ │ │ │ │ 1. 申请Token │ │ │───────────────────│ │ │ │ │ │ 2. 返回Token │ │ │───────────────────│ │ │ │ │ │ 3. 预授权请求 │ │ │───────────────────│ │ │ │ 4. 验证Token │ │ │───────────────────│ │ │ │ │ │ 5. 生成Ticket和Session│ │ │───────────────────│ │ │ │ │ 6. 返回重定向URL │ │ │───────────────────│ │ │ │ │ │ 7. 重定向到系统A │ │ │────────────────────────────────────────│ │ │ │ │ │ 8. 验证Ticket │ │ │───────────────────│ │ │ │ │ │ 9. 返回Session参数 │ │ │───────────────────│ ┌─────┴───────┐ ┌─────┴───────┐ ┌─────┴───────┐ │ 系统B │ │ IAP平台 │ │ 系统A │ └─────────────┘ └─────────────┘ └─────────────┘1. 申请Token 系统B调用 /interface/v1/token 接口获取Token 2. 预授权 系统B调用 /interface/v1/preauth 接口提供servCode等参数 3. 生成Ticket IAP生成16位ticket有效期300秒存储在Redis中 4. 保存Session IAP保存会话信息到 iap_session 表参数到 iap_session_serv_param 表 5. 返回重定向URL IAP返回包含sessionId、ticket和redirectUri的响应 6. 重定向 系统B重定向到系统A的页面 7. 验证Ticket 系统A调用IAP的 /interface/v1/authentication 接口验证ticket 8. 返回Session参数 IAP返回会话参数给系统A步骤1A系统挂号系统获取Token接口POST /iap/interface/token请求头systemCode: 100 messageId: 171922560010009990301123424位唯一ID请求体加密后{ clientId: system_100, clientSecret: 你的密钥 }返回解密后{ token: Token_100_abc123, sessionId: session_123 }步骤2A系统申请跳转凭证关键步骤接口POST /iap/interface/v1/preauth请求头systemCode: 100 messageId: 1719225600100099903025678新ID token: Token_100_abc123上一步获得请求体加密后{ messageId: 1719225600100099903025678, servCode: online_hospital, param: { user: { systemUserId: 123, systemUserName: 张三 } } }返回解密后{ redirectUrl: http://hospital.com/chat, ticket: ticket_xyz789, timestamp: 1719225600, sessionId: preauth_456 }步骤3A系统跳转到B系统操作浏览器重定向到http://hospital.com/chat?ticketticket_xyz789timestamp1719225600presessionidpreauth_456步骤4B系统互联网医院验证跳转接口POST /iap/interface/v1/authentication请求头systemCode: 101 messageId: 1719225600101099903039012新ID token: Token_101_def456B系统自己的Token请求体请求集成平台验证ticket是否有效{ ticket: ticket_xyz789, timestamp: 1719225600 }返回用户信息等业务参数✅场景1完整流程 A系统拿Token → A系统申请跳转凭证 → 浏览器跳转 → B系统验证凭证 → 进入业务页面场景2HTTP API调用后台获取数据典型业务互联网医院(101)调用挂号系统(100)的科室列表必须接口/iap/interface/token/iap/runtime/v1/{uri}┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 系统B │ │ IAP平台 │ │ 系统A │ └─────┬───────┘ └─────┬───────┘ └─────┬───────┘ │ │ │ │ 1. 申请Token │ │ │───────────────────│ │ │ │ │ │ 2. 返回Token │ │ │───────────────────│ │ │ │ │ │ 3. 调用服务带Token│ │ │───────────────────│ │ │ │ 4. 验证Token │ │ │───────────────────│ │ │ │ │ │ 5. 验证订阅关系 │ │ │───────────────────│ │ │ │ │ │ 6. 转发请求 │ │ │───────────────────│ │ │ │ │ │ 7. 返回响应 │ │ │───────────────────│ │ │ │ │ 8. 返回加密响应 │ │ │───────────────────│ │ ┌─────┴───────┐ ┌─────┴───────┐ ┌─────┴───────┐ │ 系统B │ │ IAP平台 │ │ 系统A │ └─────────────┘ └─────────────┘ └─────────────┘服务发布系统A在 iap_serv 表配置服务状态ENABLE在 iap_serv_http_api 表配置API信息请求URI、方法等服务订阅系统B订阅系统A对应的服务调用 IapServSubscribeController.create() 接口保存订阅关系到 iap_serv_subscribe 表描述1. 申请Token 系统B调用 /interface/v1/token 接口获取有效期为5小时的Token2. 调用服务 系统B使用Token和加密参数调用 /runtime/v1/** 接口3. 验证Token IAP验证Token的有效性和系统匹配性4. 验证订阅关系 IAP检查系统B是否已订阅该服务5. 转发请求 IAP将请求转发给系统A6. 返回响应 系统A返回响应IAP加密后返回给系统B步骤1B系统互联网医院获取Token接口POST /iap/interface/token请求头systemCode: 101 messageId: 171922560010109990304345624位ID请求体加密后{ clientId: system_101, clientSecret: 你的密钥 }返回{ token: Token_101_def456, sessionId: session_789 }步骤2B系统调用服务接口POST /iap/runtime/v1/departments请求头systemCode: 101 messageId: 1719225600101099903057890新ID token: Token_101_def456上一步获得请求体加密后{ messageId: 1719225600101099903057890, serviceCode: get_departments, param: { hospitalId: 123456 } }返回解密后{ departments: [ {id: 1, name: 内科}, {id: 2, name: 外科} ] }✅场景2完整流程 B系统拿Token → B系统直接调用服务 → 获取数据注意此场景不调用/iap/interface/v1/preauth申请授权码和/iap/interface/v1/authentication认证授权场景3消息广播群发通知典型业务挂号系统(100)发布新号源通知所有订阅系统必须接口/iap/interface/token/iap/interface/v1/publish/message/iap/interface/v1/commit/message┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 系统A │ │ IAP平台 │ │ Kafka │ └─────┬───────┘ └─────┬───────┘ └─────┬───────┘ │ │ │ │ 1. 申请Token │ │ │───────────────────│ │ │ │ │ │ 2. 返回Token │ │ │───────────────────│ │ │ │ │ │ 3. 发布消息请求 │ │ │───────────────────│ │ │ │ 4. 验证Token │ │ │───────────────────│ │ │ │ │ │ 5. 验证发布权限 │ │ │───────────────────│ │ │ │ │ │ 6. 发布Kafka消息 │ │ │───────────────────│ │ │ │ │ 7. 返回发布结果 │ │ │───────────────────│ │ ┌─────┴───────┐ ┌─────┴───────┐ ┌─────┴───────┐ │ 系统A │ │ IAP平台 │ │ Kafka │ └─────────────┘ └─────────────┘ └─────────────┘描述1. 申请Token 系统A调用 /interface/v1/token 接口获取Token2. 发布消息 系统A调用 /interface/v1/publish/message 接口提供topicName和消息内容3. 验证Token IAP验证Token的有效性4. 验证发布权限 IAP检查系统A是否有权发布该服务的消息5. 发布Kafka消息 IAP将消息发布到 IAP_TOPIC_${servCode} 主题6. 返回结果 IAP返回发布结果给系统A步骤1发布方挂号系统获取Token接口POST /iap/interface/token请求头systemCode: 100 messageId: 1719225600100099903061234步骤2发布方发布消息接口POST /iap/interface/v1/publish/message请求头systemCode: 100 messageId: 1719225600100099903075678 token: Token_100_abc123请求体加密后{ topicName: new_appointment, param: { department: 内科, date: 2023-07-25 } }步骤3订阅方处理消息操作订阅方如互联网医院从Kafka消费消息各订阅方凭管理员提供的TOPIC和GROUP订阅和消费消息。步骤4订阅方确认消息接口POST /iap/interface/v1/commit/message请求头systemCode: 101 messageId: 1719225600101099903089012 token: Token_101_def456 presessionid: session_from_kafka请求体加密后{ publishMsgId: 消息ID_abc123, ack: 1 // 1成功0失败 }✅场景3完整流程 发布方拿Token → 发布方发布消息 → 订阅方消费消息 → 订阅方确认消息注意此场景不调用/iap/interface/v1/preauth申请授权码和/iap/interface/v1/authentication认证授权五、常见错误与解决方案错误码错误信息原因解决方案1000请勿重新调用messageId重复每次请求生成新24位ID1001参数缺失缺少必填参数检查文档要求的参数是否都传了1003票根无效用了错误的ticket重新调用/iap/interface/v1/preauth获取新ticket1004票根重复消费同一个ticket用了两次每次跳转必须用新ticket1004票根过期ticket超过100秒生成后100秒内必须使用1005令牌无效Token过期或错误重新调用/iap/interface/token1006服务未授权没订阅这个服务先在管理平台订阅服务1009服务不存在服务未上架联系管理员上架服务最高频错误messageId重复1000集成平台不做幂等必须每次生成新IDToken过期1005Token有效期通常30分钟过期必须重申请票根过期1004ticket100秒内必须用否则重申请六、重要安全提醒必须遵守1. Token使用规则Token是临时凭证每次调用服务前都要验证是否有效绝对不能把Token写死在代码里每次用前检查有效期Token泄露 身份被盗用必须严格保密2. 数据加密要求所有业务参数必须SM4加密不能传明文加密示例JavaSM4 sm4 SmUtil.sm4(HexUtil.decodeHex(secretKey)); String encrypted sm4.encryptHex(plaintext);3. 请求唯一性messageId生成规则0-12位: 13位时间戳13-16位: 四位系统编码不足左补0如010017-20位: 接口目录编码如030121-24位: 4位随机数示例17192256001000100030198764. 场景区分页面跳转→ 用3.13.2接口后台取数据→ 用3.4接口群发通知→ 用3.53.7接口七、快速自查清单调用前必看✅通用检查请求头写了正确的systemCode100/101/901...生成了24位唯一messageId在加密的param中重复写入相同的messageId除Token接口外其他接口都带了token参数✅场景1页面跳转检查A系统已调/iap/interface/tokenA系统已调/iap/interface/v1/preauth带token重定向URL包含tickettimestamppresessionidB系统已调/iap/interface/v1/authentication验证✅场景2API调用检查B系统已调/iap/interface/token调用的是/iap/runtime/v1/{uri}不是3.1/3.2接口请求体包含serviceCode和业务参数✅场景3消息广播检查发布方已调/iap/interface/token调用/iap/interface/v1/publish/message时指定了topicName订阅方从Kafka消费后已调/iap/interface/v1/commit/message确认八、总结IAP集成平台通过统一的入口、严格的安全认证和高效的消息传递机制实现了不同系统之间的安全、高效通信。系统间的所有交互都通过IAP进行转发和验证大大降低了系统间直接连接的复杂度和安全风险。最后提醒集成平台是工具核心业务逻辑仍在各系统自身。附录关键接口速查表场景接口URL用途必填参数通用/iap/interface/token申请TokenclientId, clientSecret页面跳转/iap/interface/v1/preauth申请跳转凭证token, servCode页面跳转/iap/interface/v1/authentication验证跳转token, ticket, timestampAPI调用/iap/runtime/v1/{uri}调用服务token, serviceCode消息广播/iap/interface/v1/publish/message发布消息token, topicName消息广播/iap/interface/v1/commit/message确认消息token, publishMsgId, ack