外部系统接入SSO-OAuth2(6.3.x 之后版本支持)

一、概述

统一身份认证系统提供了单点登录功能。本文档详述了统一身份认证系统单点登录接口,介绍了应用系统对接统一身份认证系统的过程和方法,用以帮助开发人员将应用系统接入统一身份认证系统。

本文档支持的协议:OAuth2

二、统一认证集成规范

2.1 SSO登录场景

序号 场景 预期结果 确认
1 登录跳转,在未登录的条件下,直接访问业务系统 跳转到单点登录界面
2 登录跳转,在已登录的条件下,直接访问业务系统 直接进入业务系统
3 正常登录,先登录认证,然后访问业务系统 直接进入业务系统
4 正常登出,在单点登录系统登出 访问业务系统要重新登录
5 正常登出,在业务系统登出 单点登录系统同步登出

2.2 认证流程

OAuth2 登录和认证流程
外部系统接入SSO-OAuth2(6.3.x 之后版本支持)

  1. 后端验证 token 后,创建本地会话(如 JSESSIONID 或自定义 Cookie);
  2. 后续应用请求靠本地会话维持登录状态,不再依赖原始 token;
  3. 本地会话有过期时间(如 30 分钟无操作过期);

三、认证服务接口

3.1 SSO服务端认证

浏览器登录

分类 说明
请求地址(开发环境) http://${host}:${port}/pamirs/sso/auth?client_id={client_id}&redirect_uri={redirect_uri}&state={state}
请求地址(测试环境) http://${host}:${port}/pamirs/sso/auth?client_id={client_id}&redirect_uri={redirect_uri}&state={state}
请求方式 GET
请求参数 redirect_uri:应用系统回调地址
client_id:SSO 服务端颁发的应用 ID
state:可选但推荐,用于防止 CSRF 的随机字符串(UUID 随机码)
请求示例 http://${host}:${port}/pamirs/sso/auth?client_id=client123456&redirect_rui=http://app.example.com&state=abc123
响应说明 1. 已登录:重定向到 redirect 地址并携带授权码 code,如 http://app.example.com&state=abc123&code=xxx
2. 未登录:重定向到服务器 SSO 登录地址
备注 SSO 登录成功后,会携带授权码并重定向到 redirect 地址

3.2 验证授权码

分类 说明
请求地址(开发环境) http://${host}:${port}/pamirs/sso/oauth2/authorize
请求地址(测试环境) http://${host}:${port}/pamirs/sso/oauth2/authorize
请求方式 POST
请求 Body {"grant_type":"authorization_code","client_id":"xxxx","client_secret":"xxxxx","code":"xxxx"}
请求示例 http://${host}:${port}/pamirs/sso/oauth2/authorize
响应说明 {"code":"0","msg":"成功","data":{"access_token":"xxxxx","expires_in":7200,"refresh_token":"xxxxxx","refresh_token_expiresIn":604800}}
备注

3.2 根据token获取用户信息

分类 说明
请求地址(开发环境) http://${host}:${port}/pamirs/sso/oauth2/getUserInfo
请求地址(测试环境) http://${host}:${port}/pamirs/sso/oauth2/getUserInfo
请求方式 POST
请求头 Authorization: Bearer xxxxxxxx
请求 Body {"client_id":"xxxx"}
请求示例 http://${host}:${port}/pamirs/sso/oauth2/getUserInfo
响应 {"code":"0","msg":"成功","data":{"name":"xxxxx","email":"xxxxx","login":"xxxxxx","id":"xxxxxxx"}}
备注 成功返回用户信息;失败返回错误码:1

根据实际情况其他协议的验证接口

3.3 单点登出接口

分类 说明
请求地址(开发环境) http://${host}:${port}/pamirs/sso/oauth2/logout
请求地址(测试环境) http://${host}:${port}/pamirs/sso/oauth2/logout
请求方式 POST
请求头 Authorization: Bearer xxxxxxxx
请求 Body {"client_id":"xxxx"}
请求示例 http://${host}:${port}/pamirs/sso/oauth2/logout
响应头 HTTP/1.1 200;Content-Type: application/html;charset=UTF-8
响应体 登出成功页面
备注 应用系统向 SSO 系统发起登出请求,SSO 收到后会通知所有其它系统登出该用户

四、应用注册

  1. 在服务端登记接入的应用,颁发应用的client_Id和client_secret; 注意回调地址,必须带上Schema(http(s))
    外部系统接入SSO-OAuth2(6.3.x 之后版本支持)
    外部系统接入SSO-OAuth2(6.3.x 之后版本支持)

  2. 并确保部署的应用机器能访问到SSO的服务端:

五、客户端接入

5.1 方式一:引入SSO客户端

业务系统在接入SSO统一认证系统时,工程中引入SSO客户端jar包,实现少量业务逻辑就可以完成接入,过程如下:

  1. 引入客户端依赖
    <dependency>
    <groupId>pro.shushi.pamirs.core</groupId>
    <artifactId>pamirs-sso-client-starter</artifactId>
    </dependency>
  2. 应用配置修改
    修改你SpringBoot应用的application.yaml,增加客户端的相关配置项

    pamirs:
      sso:
        #服务端地址
        server-url: http(s)://ssoIp:port/pamirs/sso/oauth2
        #客户端ID
        client-id: 1003
        #客户端密钥
        client-secret: 23bfde398056736c6ead917c3e6a2a5d
        #客户端排除拦截urls,默认为空,支持AntPathMatcher匹配
        exclude-urls:
          - /sample/demo/page
          - /sample/demo/i18n
        #客户端拦截urls,默认通配所有路径,支持AntPathMatcher匹配
        url-patterns:
          - /sample/*

说明:

  • server-url为SSO服务端认证地址;
  • client-id和client-secret是步骤一在服务端登记时生成的应用标识和密钥,用于客户端向服务端发起accessToken请求做校验;

5.2 方式二:不引入客户端包

使用场景:不使用SSO客户端包或者不是java语言,可以参照上面的认证接口进行。

六、外部应用接入到Oinone应用中心

1、确保在SSO应用注册时,正确填写了 回调地址;
2、在应用中心创建应用,参考下面的截图;
外部系统接入SSO-OAuth2(6.3.x 之后版本支持)
3、配置应用的首页
外部系统接入SSO-OAuth2(6.3.x 之后版本支持)
给应用配置首页:
1、选择“绑定URL”
2、URL配置为:http(s)://ssoIp:port/pamirs/sso/apply/transfer?client_id=xxxxxxxxxxxxxxxxxxxxxx
client_id 为外部应用在SSO服务端登记后生成的唯一应用标识
开发环境:http://${host}:${port}/pamirs/sso/apply/transfer?client_id=xxxxxxxxxxxxxxxxxxxxxx
测试环境:http://${host}:${port}/pamirs/sso/apply/transfer?client_id=xxxxxxxxxxxxxxxxxxxxxx
线上环境:http://${host}:${port}/pamirs/sso/apply/transfer?client_id=xxxxxxxxxxxxxxxxxxxxxx
3、跳转类型选择“开单新窗口”;
4、配置完成保存后,刷新页面。就可以从配置中心跳转到目标页面的回调地址了。

Oinone社区 作者:yexiu原创文章,如若转载,请注明出处:https://doc.oinone.top/other/25443.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
yexiu的头像yexiu数式员工
上一篇 2025年12月24日 pm5:39
下一篇 2024年5月23日 am9:57

相关推荐

  • 设计器基础学习路径

    模块 内容 目标 doc 链接 模型设计器 模型 1.熟悉模型管理和字段管理 模型 数据字典 熟悉数据字典的创建 数据字典 数据编码 了解数据编码的操作创建 数据编码 界面设计器 了解页面 了解界面设计器中的页面 页面 页面设计 增删改查 【界面设计器】模型增删改查基础 页面设计 左树右表 【界面设计器】左树右表 页面设计 树形表格 【界面设计器】树形表格 页面设计 树下拉 【界面设计器】树下拉/级联 页面设计 自定义组件基础 【界面设计器】自定义字段组件基础 页面设计 熟悉页面设计的操作 页面设计 自定义组件 熟悉如何使用自定义组件 自定义组件 流程设计器 流程组成 了解流程的组成 流程 流程设计 熟悉流程设计内容 流程设计 熟悉流程的触发节点 流程触发 熟悉流程的节点动作与设计使用 节点动作 低代码与无代码结合 示例讲解 Outsourcing相关 低无一体的开发方式、设计数据的导入导出等

    2024年6月15日
    91600
  • 后台嵌入其他系统的界面,设计器:嵌入网页组件

    管理后台如何新增Iframe嵌入其他系统的界面: 1、新建一个模型。模型中有放【url】的字段2、3、切换组件4、点击发布5、测试环境验证下,后端那个字段返回嵌入的【url】就可以展示这个url的内容了6、最后效果如下:

    2024年12月27日
    1.0K00
  • 后端脚手架生成工程

    后端脚手架生成工程 1、使用如下命令来利用项目脚手架生成工程:新建archetype-project-generate.sh(bat) 脚本 archetype-project-generate.sh #!/bin/bash # 项目生成脚手架 # 用于新项目的构建 # 脚手架使用目录 # 本地 local # 本地脚手架信息存储路径 ~/.m2/repository/archetype-catalog.xml archetypeCatalog=local # 以下参数以pamirs-demo为例 # 新项目的groupId groupId=pro.shushi.pamirs.demo # 新项目的artifactId artifactId=pamirs-demo # 新项目的version version=1.0.0-SNAPSHOT # Java包名前缀 packagePrefix=pro.shushi # Java包名后缀 packageSuffix=pamirs.demo # 新项目的pamirs platform version pamirsVersion=6.2.8 # Java类名称前缀 javaClassNamePrefix=Demo # 项目名称 module.displayName projectName=OinoneDemo # 模块 MODULE_MODULE 常量 moduleModule=demo_core # 模块 MODULE_NAME 常量 moduleName=DemoCore # spring.application.name applicationName=pamirs-demo # tomcat server address serverAddress=0.0.0.0 # tomcat server port serverPort=8090 # redis host redisHost=127.0.0.1 # redis port redisPort=6379 # 数据库名 db=demo # zookeeper connect string zkConnectString=127.0.0.1:2181 # zookeeper rootPath zkRootPath=/demo mvn archetype:generate \ -DinteractiveMode=false \ -DarchetypeCatalog=${archetypeCatalog} \ -DarchetypeGroupId=pro.shushi.pamirs.archetype \ -DarchetypeArtifactId=pamirs-project-archetype \ -DarchetypeVersion=6.2.8 \ -DgroupId=${groupId} \ -DartifactId=${artifactId} \ -Dversion=${version} \ -DpamirsVersion=${pamirsVersion} \ -Dpackage=${packagePrefix}.${packageSuffix} \ -DpackagePrefix=${packagePrefix} \ -DpackageSuffix=${packageSuffix} \ -DjavaClassNamePrefix=${javaClassNamePrefix} \ -DprojectName="${projectName}" \ -DmoduleModule=${moduleModule} \ -DmoduleName=${moduleName} \ -DapplicationName=${applicationName} \ -DserverAddress=${serverAddress} \ -DserverPort=${serverPort} \ -DredisHost=${redisHost} \ -DredisPort=${redisPort} \ -Ddb=${db} \ -DzkConnectString=${zkConnectString} \ -DzkRootPath=${zkRootPath} archetype-project-generate.bat @echo off :: 项目生成脚手架 set archetypeCatalog=local set groupId=pro.shushi.pamirs.demo set artifactId=pamirs-demo set version=1.0.0-SNAPSHOT set packagePrefix=pro.shushi set packageSuffix=pamirs.demo set pamirsVersion=6.2.8 set javaClassNamePrefix=Demo set projectName=OinoneDemo set moduleModule=demo_core set moduleName=DemoCore set applicationName=pamirs-demo set serverAddress=0.0.0.0 set serverPort=8090 set redisHost=127.0.0.1 set redisPort=6379 set db=demo set…

    2025年8月22日
    50800
  • IP黑白名单实现拦截三方用户

    已知厂商IP为10.139.0.1,经系统检测122.233.24.28、138.122.12.9为风险IP,需要禁止访问。 白名单配置:10.139.0.1 黑名单配置:122.233.24.28、138.122.12.9 厂商请求到Oinone开放平台请求头需携带X-Forwarded-For和X-Real-IP,例如: X-Forwarded-For 122.233.24.28 X-Real-IP 122.233.24.28 经Nginx代理后,oinone获取的请求头内容: X-Forwarded-For 122.233.24.28, 10.139.0.1 # 代理追加厂商IP到末尾 X-Real-IP 122.233.24.28 # 保持客户端原始值,Nginx不处理 效果:厂商10.139.0.1发送的请求且用户X-Real-IP不在黑名单内才放行。 注意事项 Nginx如果配置X-Real-IP需关闭,否则拿到的永远是厂商IP。 proxy_set_header X-Real-IP $remote_addr; 相关文章 开放应用中的ip黑白名单

    2025年5月15日
    34600

Leave a Reply

登录后才能评论