JeeSite 4.x

Spring Boot 最好的快速开发平台

OAauth2 统一认证服务器软件文档

介绍

JeeSite OAuth2 Server 是基于 Spring Authorization Server 0.2 框架实现的 OAuth2 统一认证服务器。

Spring Authorization Server 有 Spring Security 团队维护,起初有社区驱动,目前已纳入 Spring Projects 中。

目前国内使用 Spring Security OAuth Server 实现的比较多,但已经不推荐使用,在 Spring 框架新版里 Spring Security OAuth Server 的代码中,已经被标记 “Deprecated” 注解。

Spring 官方推荐使用 Spring Authorization Server 框架取代 Spring Security OAuth 中的 Authorization Server。

Spring Authorization Server 完成了 授权码模式、密码模式、刷新令牌、撤销令牌、资源服务,实现 应用接入授权、JDBC 存储 等功能。

开源地址:https://github.com/spring-projects/spring-authorization-server

功能白话

OAuth2 这个词,相信你已经比较耳熟,它的概念这里就不长篇大论了,网上可以搜索 “OAuth2” 就会到很多学习资源。 你可能看了很多概念还是不太理解,本文就通过大白话,来简要介绍下 OAuth2 的使用场景。

OAuth2 服务器都有哪些?比如各大互联网中的 “开放平台”,如:QQ 开放平台、微信开放平台、百度开放平台 等等, 开放平台中就实现了 OAuth2 协议。也就是可以通过 QQ 账号,获取 QQ 开发平台里的一些数据资源,也就是咱们平时见到的,通过 QQ 账号登录咱们的系统。

JeeSite OAuth2 Server 主要包括两部分:一是身份认证服务:通过账号密码进行登录系统,说明这个账号是合法的; 二是资源服务:这个账号可以获取哪些资源,可以访问哪些数据,比如 JeeSite 的用户信息数据。

服务端:

首先需要在 JeeSite OAuth2 Server 菜单里找到 “应用接入管理”,注册一个应用(第三方系统)并设定该应用的授权范围。 这样注册的应用就有权限获取 JeeSite 认证系统里的账号资源,进行登录自己的系统了。

客户端:

调用步骤(OAuth2授权码模式):

  1. 第三方系统,调用 JeeSite 认证服务授权码获取接口
  2. 若 JeeSite 认证服务未登录,则先登录 JeeSite 认证中心
  3. 认证中心会弹出 “应用接入” 授权确认界面,等待授权确认(也可以免确认)
  4. 授权允许确认后,返回授权码 code 给第三方系统
  5. 第三方系统根据 code 获取令牌 access_token 接入码
  6. 第三方系统再根据 access_token 获取相应资源(如:JeeSite 认证服务的 用户信息)
  7. 第三方可根据用户信息进行登录自己的系统

快速体验

服务端在线演示

  1. 地址:http://demo.jeesite.com/
  2. 账号:system
  3. 密码:admin
  4. 菜单:扩展功能 -> 应用接入管理

服务端本地化部署

打开 web 的 pom.xml,加入如下模块依赖代码:

<!-- 统一认证服务器 -->
<dependency>
	<groupId>com.jeesite</groupId>
	<artifactId>jeesite-module-oauth2-server</artifactId>
	<version>${project.parent.version}</version>
</dependency>

注意:该软件独立授权,请联系商务咨询。

客户端配置方法

打开 web 的 pom.xml,加入如下模块依赖代码:

<!-- 第三方账号登录 -->
<dependency>
	<groupId>com.jeesite</groupId>
	<artifactId>jeesite-module-oauth2</artifactId>
	<version>${project.parent.version}</version>
</dependency>

注意:专业版提供,此模块依赖,请向售后人员索取。

配置文件 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

官方提供 demo.jeesite.com 用来演示 OAuth2 认证过程,免本地化部署 OAuth2 服务器。

访问登录地址:http://127.0.0.1:8980/js/oauth2/login/jeesite

授权调用接口

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

认证服务器允许接入后,调用 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

返回结果:

{
  "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
}

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":"匠心品质"
}

关注 JeeSite 公众号,了解最新动态