UNI-SOP提供了两个集成客户端:SpringBoot2.x/JAVA1.8和SpringBoot3.x/JAVA17,满足不同项目的集成需求。
-
平台接入
使用UNI-SOP之前,业务平台需要进行接入,完成校验后才能正常使用,先引入客户端开发SKD包。
<dependency>
<groupId>licode.unisop.client</groupId>
<artifactId>uni-client-20</artifactId>
<version>1.0.0</version>
</dependency>
SpringBoot2.x的项目就引入20版本的客户端,如果是SprintBoot3.0就引入30版本的,引入依赖包后,还需要配置注册的平台信息(需要把业务平台注册到UNI-SOP认证中心),在application.yml文件里配置如下信息:
uni-sop:
host: http://localhost:5801
platform:
registers:
- { id: efaa79946774c60db282, secret: 28f52fdcb1502b67925543d591f5b92a }
- { id: ea817e210587c4c36ed1, secret: 15ea93f7392c75b626fd0978c8d5b9e3 }
配置比较简单,说明如下:
host:UNI-SOP认证中心地址;
platform:
registers: 需要注册到认证中心的平台信息。
一个业务工程可以注册多个UNI-SOP管理的平台信息,这样有个好处就是,我们一个项目工程可以实现多个逻辑上的业务平台,一般对应到前端就是有多个。
配置好后,启动项目就会自动注册到UNI-SOP认证中心了,提供的认证中心客户端JAR包实现了自动检测平台注册功能,还有一套操作认证中心的接口,平台注册成功后会在控制台打印类似如下信息:
上面显示我们商城项目单体部署(商家、运营和商城),每个业务平台向认证中心注册的信息结果。
集成客户端后会提供如下对外接口:
这样,业务平台自动就有了操作UNI-SOP的接口功能,不需要业务平台再额外开发,可以直接提供给前端调用。
-
普通登录
普通登录是相对于单点登录而言,每次登录没有对应的会话令牌,只有独立的访问令牌,普通登录代码如下:
// 开始请求后端接口登录
const loginContext: any = {
category: 'account', // 账号类型为account
authType: 'password', // 认证类型为密码
username: 'licode', // 账号名称为licode
account: 'licode',
authCode: 12312sdfsdfsdf3131, // MD5加密的密码
authContext: "xxx平台", // 业务上下文(登录成功后原样保存)
}
const result = await userLogin(loginContext);
上述代码是一个标准的普通登录,比较简单,登录的地址为:
/uni-api/v1/auth/login
此地址是集成UNI-SOP客户端自动就有的,不用业务平台自己开发。
登录成功后返回的结果有用户信息和生成的认证信息(访问令牌和刷新令牌等),这样我们就完成了登录,然后就可以使用系统,是不是很简单。
-
单点登录
单点登录相比普通登录稍微复杂一些,不过也比较简单,UNI-SOP平台本身实现了统一管理中心,单点登录就是利用UNI-SOP的统一管理中心来完成的。
第一步,业务前端系统先重定向到UNI-SOP平台统一认证中心,代码如下:
http://localhost:6020?platform='xxx'&client_id='xxx'&client_secret='xxx'
重定向的时候带上平台ID、客户端ID和客户端秘钥就可以了。
第二步,UNI-SOP平台统一认证中心输入用户名、密码完成验证后,生成票据ticket;
第三步,UNI-SOP平台统一认证中心根据业务平台配置,重定向到业务平台指定的验证地址;
第三步,流程重新回到了我们业务前端平台,前端平台利用ticket码调用认证中心的如下接口:
/uni-api/v1/auth/token
来换取用户的登录认证信息,这样就完成一次完整的单点登录流程。
-
用户资源获取
登录用户,WEB前端需要获取用户可用的资源,包括角色、权限、菜单等,这样前端就可以根据用户拥有的资源来完成对应的操作,从而实现权限的控制,获取资源接口如下:
/uni-auth/v1/token/auth-user-assets
返回结果类型如下:
包含了角色码、菜单和权限码信息,前端可以根据用户拥有的资源完成权限控制,后台同样也会根据用户权限完成用户对相应接口的访问控制,后面会介绍业务后台接口怎么样完成权限访问控制使用。
-
登录信息查看
登录的用户我们可以在UNI-SOP认证管理中心查看,而且可以对用户完成强制退出以及对整个会话强制退出等管理功能,当然,这些操作需要有对应的权限才能完成,用户登录信息如下:
从上面我们可以直观看到用户登录了哪些平台,从哪些终端进来的,多久会超时,一目了然,非常方便。
-
业务后台权限控制
业务后台如果没有对应资源权限的控制,那么是不完整的,UNI-SOP对于业务后台资源权限的控制比较简单,直接采用注解的方式即可完成(当然也可以自己调用代码完成,不过,操作没有注解来得简单直观),代码如下:
一个HasAuthority注解就搞定,而且此注解支持SpringBoot方式的配置读取的,非常方便。其同时支持权限和角色的权限访问控制,比如上面的权限控制逻辑为:拥有角色system:admin或拥有权限mall:activity:add的用户可以访问此接口。
这就是一个使用UNI-SOP的基本的最简单的流程,当然,UNI-SOP还支持由业务平台完成对用户的验证,然后由UNI-SOP完成认证信息的生成和管理等高级功能,支持业务各种复杂场景的使用,后面会进行介绍。