JeeSite OAauth2 统一认证服务器软件文档
# 介绍
JeeSite OAuth2 Server 是基于 Spring Authorization Server 框架实现的 OAuth2 统一认证服务器。
它还是一个身份和访问管理(Identity and Access Management, IAM)的解决方案,在现代企业中扮演着至关重要的角色。
它负责确保只有经过授权的用户才能访问特定的资源,并且只能执行他们被允许的操作。Spring Authorization Server 已经完成了 授权码模式、密码模式、刷新令牌、撤销令牌、资源服务,实现 应用接入授权、JDBC 存储 等功能。
它将整合部署在本地或云端的内部办公系统、业务系统及第三方系统的所有身份认证机制和资源数据共享,实现单一账号无缝访问所有应用的服务,从而简化用户登录流程,提升工作效率。
开源地址:https://github.com/spring-projects/spring-authorization-server (opens new window)
# 功能白话
OAuth2 这个词,相信您已经比较耳熟,它的概念这里就不长篇大论了,网上可以搜索 “OAuth2” 就会到很多学习资源。 您可能看了很多概念还是不太理解,本文就通过大白话,来简要介绍下 OAuth2 的使用场景。
OAuth2 服务器都有哪些?比如各大互联网中的 “开放平台”,如:QQ 开放平台、微信开放平台、百度开放平台 等等, 开放平台中就实现了 OAuth2 协议。也就是可以通过 QQ 账号,获取 QQ 开发平台里的一些数据资源,也就是咱们平时见到的,通过 QQ 账号登录咱们的系统。
JeeSite OAuth2 Server 就可以理解为是 “开放平台”,帮助第三方系统使用 JeeSite 账号进行登录它的系统,且可根据一定要的权限范围,获取对应的 JeeSite 身份数据、功能权限、甚至业务功能数据等资源,提供给第三方系统使用。
本软件主要包括两部分服务:一是身份认证服务:通过账号密码进行登录系统,说明这个账号是合法的; 二是资源服务:这个账号可以获取哪些资源,可以访问哪些数据,比如 JeeSite 的用户信息数据。
服务端:
首先需要在 JeeSite OAuth2 Server 菜单里找到 “应用接入管理”,注册一个应用(第三方系统)并设定该应用的授权范围。 这样注册的应用就有权限获取 JeeSite 认证系统里的账号资源,进行登录自己的系统了。
客户端:
调用步骤(OAuth2授权码模式):
- 第三方系统,调用 JeeSite 认证服务授权码获取接口
- 若 JeeSite 认证服务未登录,则先登录 JeeSite 认证中心
- 认证中心会弹出 “应用接入” 授权确认界面,等待授权确认(也可以免确认)
- 授权允许确认后,返回授权码 code 给第三方系统
- 第三方系统根据 code 获取令牌 access_token 接入码
- 第三方系统再根据 access_token 获取相应资源(如:JeeSite 认证服务的 用户信息)
- 第三方可根据用户信息进行登录自己的系统
# 快速体验
# 服务端在线演示
- 地址:http://demo.jeesite.com/ (opens new window)
- 菜单:扩展功能 -> 应用接入管理
# 服务端本地化部署
打开 web 的 pom.xml,加入如下模块依赖代码:
<!-- 统一认证服务器 -->
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-module-oauth2-server</artifactId>
<version>${project.parent.version}</version>
</dependency>
2
3
4
5
6
注意:该软件独立授权,请联系商务咨询。
# 客户端配置方法
打开 web 的 pom.xml,加入如下模块依赖代码:
<!-- 第三方账号登录 -->
<dependency>
<groupId>com.jeesite</groupId>
<artifactId>jeesite-module-oauth2</artifactId>
<version>${project.parent.version}</version>
</dependency>
2
3
4
5
6
注意:v4.1.8+ 专业版提供,此模块依赖,请向售后人员索取。
配置文件 application.yml 增加 JeeSite OAuth2 配置如下:
oauth2:
jeesite:
clientId: jeesite
clientSecret: jeesite
redirectUri: http://127.0.0.1:8980/js/oauth2/callback/jeesite
serverUrl: http://127.0.0.1:9999/js
#serverUrl: https://demo.jeesite.com/js
2
3
4
5
6
7
官方提供 demo.jeesite.com 用来演示 OAuth2 认证过程,免本地化部署 OAuth2 服务器。
访问登录地址:http://127.0.0.1:8980/js/oauth2/login/jeesite (opens new window)
# 授权调用接口
1、获取授权码
GET:http://127.0.0.1:9999/js/oauth2/authorize
?response_type=code
&client_id=jeesite
&redirect_uri=http://127.0.0.1:8980/js/oauth2/callback/jeesite
&state=c43197e0ed0b6534147389607b5ce359
&scope=profile
2
3
4
5
6
认证服务器允许接入后,调用 redirect_uri 地址,在该地址中可接受到 code 参数。
2、获取接入令牌
POST:http://127.0.0.1:9999/js/oauth2/token
?code=_6r1eh3dablJ-yC-CcTaScJRasMlnWo68N-3pHNrddFVNS0XFS1QXU9VSMOF_0rQc-c4uZd6oAc_CjPcrr-R7LHXxhvAUxCJqb874RxN4WFjL168pxH5Q6V-r8n0xV2-
&client_id=jeesite
&client_secret=jeesite
&grant_type=authorization_code
&redirect_uri=http://127.0.0.1:8980/js/oauth2/callback/jeesite
2
3
4
5
6
返回结果:
{
"access_token":"eyJraWQiOiI5YzU4NmIzMi03MGViLTQ4ZjQtODk0Yi03YWNmODA0Yzc5NzEiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJzeXN0ZW0iLCJhdWQiOiJqZWVzaXRlIiwibmJmIjoxNjMwMDQzNTUyLCJzY29wZSI6WyJwcm9maWxlIl0sImV4cCI6MTYzMDA0MzczMiwiaWF0IjoxNjMwMDQzNTUyfQ.eflA4KHComs3w12LJAZaFsy9lQ_wT4WrCmrGIRXnJGwteZ_r9cFWxsutRmXcG3A8TV2qj4uLKzy6Tp1Ssn1SVSgdfEpYz-3MRJFlhT96GAWRauBSniWyJae8ind_CZoflFwQ33q35yQbF_7PDnJRC8MlUk8Y3NnxdoJOhoPUe2Wfqgm70xxNhwOY0wYNFbnql4VkzHLsZ4jUnF-xENIOdlBQiVy4HyOE0z5K0_KzuMP3UaqmNUyUI0RkRZNzwo0C3jVnLMFbnHDU-VdcsFvuBQGwPZw24xXZput5mUWsmm4nXlyvNy_WtX7mPcyx10snOTsXwgc9zz6voRE5ULJrhA",
"refresh_token":"H4lLcea7bK7FDxuEzDIGq16uAwTdxQHqKAkiQXZibHl_w-8TQ3LMeX4njozkFMAsCnh-oT-39kHmi3vKPKRs2eT9ruoAqYy9DG9-vU6rbEiTQDcYGbqdQCQO1-FpExM6",
"scope":"profile",
"token_type":"Bearer",
"expires_in":180
}
2
3
4
5
6
7
3、获取用户信息
GET:http://127.0.0.1:9999/js/oauth2/profile?access_token=eyJraWQiOiI5YzU4NmIzMi03MGViLTQ4ZjQtODk0Yi03YWNmODA0Yzc5NzEiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJzeXN0ZW0iLCJhdWQiOiJqZWVzaXRlIiwibmJmIjoxNjMwMDQzNTUyLCJzY29wZSI6WyJwcm9maWxlIl0sImV4cCI6MTYzMDA0MzczMiwiaWF0IjoxNjMwMDQzNTUyfQ.eflA4KHComs3w12LJAZaFsy9lQ_wT4WrCmrGIRXnJGwteZ_r9cFWxsutRmXcG3A8TV2qj4uLKzy6Tp1Ssn1SVSgdfEpYz-3MRJFlhT96GAWRauBSniWyJae8ind_CZoflFwQ33q35yQbF_7PDnJRC8MlUk8Y3NnxdoJOhoPUe2Wfqgm70xxNhwOY0wYNFbnql4VkzHLsZ4jUnF-xENIOdlBQiVy4HyOE0z5K0_KzuMP3UaqmNUyUI0RkRZNzwo0C3jVnLMFbnHDU-VdcsFvuBQGwPZw24xXZput5mUWsmm4nXlyvNy_WtX7mPcyx10snOTsXwgc9zz6voRE5ULJrhA
返回结果:
{
"userCode":"system",
"loginCode":"system",
"userName":"超级管理员",
"email":"test@163.com",
"sex":"1",
"avatar":"/ctxPath/userfiles/avatar/0/none/system.jpg",
"sign":"匠心品质"
}
2
3
4
5
6
7
8
9