Authorization Server 认证服务
Hi Auth
HiAuth是一个开源的基于Oauth2协议的认证、授权系统,除了标准的Oauth2授权流程功能外,还提供了应用管理、用户管理、权限管理等相关功能。
在这个项目中你能够了解到如何基于spring-security-oauth2-authorization-server
实现自己的Authorization Server 认证服务、资源服务器以及如何第三方集成,本项目基于SpringBoot 3.0 版本开发。
项目源码地址:https://github.com/bestaone/HiAuth
介绍
除了认证相关功能外,还提供了hiauth-mall、hiauth-mgr-svc项目,供用户参考如何集成。
- 参考
hiauth-mall
,你可以了解如何在第三方应用中集成hiauth授权服务; - 参考
hiauth-mgr-svc
项目,你可以快速的启动一个微服务项目的框架搭建,亦可以在这里找到一些技术的最佳实践,为你的项目开发提供参考;
HiAuth 2.0 升级到 3.0 的升级内容
- SpringBoot 3.0.2
- spring-security-oauth2-authorization-server 1.0.0
- mybatis-plus 3.5.3.1
调整比较大的地方
SpringSecurity
升级到6.0
版本后,用法有不少改动SpringSecurity5
以后已不再支持Authorization Server
,取而代之的事spring-security-oauth2-authorization-server
项目- 前端从
vue-element-admin
换成了AntDesignPro
如果你觉得此项目有价值,请给我点个star,谢谢!
项目地址:https://github.com/bestaone/HiAuth
目录结构
├─doc 文档目录,架构设计、数据库设计...
├─cicd 持续集成相关脚本
├─hiauth-parent 统一管理依赖(必选)
├─hiauth-server hiauth认证服务(必选)
├─hiauth-resource hiauth资源管理服务,参考如何集成资源服务(参考)
├─hiauth-himall himall是一个demo,参考此项目了解如何集成hiauth(参考)
├─hiauth-mgr-svc hiauth管理端后台服务,基于SpringBoot(可选)
├─hiauth-mgr-fornt hiauth管理端前端代码,基于AntDesignPro(可选)
功能
- 这个项目可以帮你实现基于
Oauth2
协议的统一认证、授权系统; - 这个项目可以帮助你快速的启动一个基于
SpringBoot
技术栈的微服务框架搭建; - 如果你仅仅使用到了Oauth2协议的统一认证、授权系统功能,那么你用技术可以是除java外的技术栈;
- himall演示了
authorization_code
模式,HiAuth支持了用户名密码、手机号短信两种认证方式; - 发送短信、登录接口实现了图形验证码防刷功能;
- HiAuth是一个前后端分离项目,前端使用了
React
、AntDesign
技术,参考这个项目,你可以自定义开发管理后端; - 基于
SpringBoot
项目更容易集成到多个平台(SpringCloud、K8S、Istio); - 演示了如何统一控制接口规范;
- 演示了如何规范异常处理;
- 演示了如何规范使用
MyBaits-Plus
、分页; - 演示了单元测试、mock测试、测试数据回滚,包括对controller、service的测试;
截图
- HiMall
- UMC
前端从
vue-element-admin
换成了AntDesignPro
截图还没来得及做新的
LIVE DEMO
- Hiauth HiMall:http://himall.hiauth.cn
- Hiauth Manger:http://mgr.hiauth.cn
- Hiauth Server:http://auth.hiauth.cn
快速启动
环境需求
- JDK17+
- Maven 3.8.6
- MySQL 8
- Redis
- NodeJS v16+(<v18)
- Yarn 1.22.4
下载源码
>git clone https://github.com/bestaone/HiAuth.git
创建数据库
在你的mysql
数据库中创建库hiauth,并执行下面脚本:
> HiAuth\doc\hiauth.sql# 也可以从JAR自己提取相关表结构
# org.springframework.security.oauth2.server.authorization.client/oauth2-registered-client-schema.sql
# org.springframework.security.oauth2.server.authorization/oauth2-authorization-consent-schema.sql
# org.springframework.security.oauth2.server.authorization/oauth2-authorization-schema.sql
调整配置
需要调整的配置有数据库、redis,默认会使用native.properties
配置,如果和你的环境不一致。
请修改:
# 需要将如下两个文件中的mysql、redis的配置改成自己的
# HiAuth\hiauth-server\src\main\properties\native.properties
# HiAuth\hiauth-mgr-svc\src\main\properties\native.propertiesapp.host=http://127.0.0.1:8080database.url=jdbc:mysql://mysql-server:3306/hiauth3?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
database.username=dev
database.password=123456redis.host=redis-server
redis.port=6379
redis.database=8
redis.password=
添加host
# IP 换成你自己的
127.0.0.1 redis-server
127.0.0.1 mysql-server
构建、启动
# 编译后台,会执行单元测试,需要正确配置数据库和redis
>cd HiAuth
>mvn clean install# 构建前端并启动
>cd HiAuth\hiauth-mgr-front
>yarn install
>yarn start# 启动hiauth授权服务端
>cd HiAuth\hiauth-server
>mvn spring-boot:run# 启动hiauth资源服务端
>cd HiAuth\hiauth-resource
>mvn spring-boot:run# 启动himall
>cd HiAuth\hiauth-himall
>mvn spring-boot:run# 启动hiauth管理后端
>cd HiAuth\hiauth-mgr-svc
>mvn spring-boot:run
验证
验证登录
- 访问HiMall:http://127.0.0.1:8081
- 访问Server:http://127.0.0.1:8080
- 访问Manager:http://127.0.0.1:8080 (具体端口看前端项目启动后的控制台输出)
验证Swagger
- 访问HiAuth的
Swagger
地址:http://127.0.0.1:8080/swagger-ui.html - 直接测试接口,显示未认证
{"error": "unauthorized","error_description": "Full authentication is required to access this resource"
}
- 点击认证按钮,会被重定向到登录,输入账号登录进行认证
- 认证成功后被重定向回swagger页面
- 再次测试接口,获取正确数据
验证Oauth2流程
authorization_code 认证流程
- 在浏览器中输入如下地址,会调到登录页,登录完成后会跳转到百度,在浏览器url中把
code
码复制出来
http://127.0.0.1:8080/oauth2/authorize?client_id=demo-client-id&response_type=code&scope=user_info&redirect_uri=http://www.baidu.com
- 使用上面获取的
code
换取accessToken
curl --location --request POST 'http://127.0.0.1:8080/oauth2/token?grant_type=authorization_code&code=code&redirect_uri=http://www.baidu.com' \--header 'Authorization: Basic ZGVtby1jbGllbnQtaWQ6ZGVtby1jbGllbnQtc2VjcmV0'
{"access_token": "xxxxxx","refresh_token": "yyyyy","scope": "user_info","token_type": "Bearer","expires_in": 7199
}
Authorization = Basic base64.encode(client_id:client_secret)
可以在网上找个在线工具生成,或者直接用postman测试,Authorization
选择Basic Auth
,填入对应值即可
- 访问受控接口,不带
accessToken
,返回401,未授权
>curl --location --request POST 'http://127.0.0.1:8082/user/info'
{"error": "unauthorized","error_description": "Full authentication is required to access this resource"
}
- 访问受控接口,携带
accessToken
,返回数据
curl --location --request POST 'http://127.0.0.1:8082/user/info' --header 'Authorization: Bearer token'
{"name":"Resource"
}
refresh_token
curl --location --request POST 'http://127.0.0.1:8080/oauth2/token?grant_type=refresh_token&refresh_token=refresh_token' \--header 'Authorization: Basic ZGVtby1jbGllbnQtaWQ6ZGVtby1jbGllbnQtc2VjcmV0'
{"access_token": "xxxxxx","refresh_token": "yyyyy","scope": "user_info","token_type": "Bearer","expires_in": 6152
}
client_credentials 认证流程
- 使用POST访问获取
access_token
接口,设置grant_type=client_credentials
curl --location --request POST 'http://127.0.0.1:8080/oauth2/token?grant_type=client_credentials&scope=user_info' \--header 'Authorization: Basic ZGVtby1jbGllbnQtaWQ6ZGVtby1jbGllbnQtc2VjcmV0'
{"access_token": "xxxxxx","scope": "user_info","token_type": "Bearer","expires_in": 7199
}
scop权限范围验证
- 使用POST访问获取
access_token
接口,设置grant_type=client_credentials
,scope=message.read
> curl --location --request POST 'http://127.0.0.1:8080/oauth2/token?grant_type=client_credentials&scope=message.read' --header 'Authorization: Basic ZGVtby1jbGllbnQtaWQ6ZGVtby1jbGllbnQtc2VjcmV0'
# 返回的 token 的权限范围是 message.read
{"access_token": "xxxxxx","scope": "message.read","token_type": "Bearer","expires_in": 7199
}
- 使用拥有
message.read
权限的toke访问用户接口,被拒绝,提示无权限
curl --location --request POST 'http://127.0.0.1:8082/user/info' --header 'Authorization: Bearer token'
{"error": "insufficient_scope","error_description": "Insufficient scope for this resource","scope": "user_info"
}
所有的127.0.0.1不能使用localhost代替,因为auth会检查域名的合法性,数据库中登记的是127.0.0.1
集成认证、授权服务
这里为了演示如何集成HiAuth、提供了一个Demo项目HiMall
。
HiMall
HiMall是基于SpringBoot
技术的微服务项目,其集成了HiAuth
的认证、授权。
环境需求
- JDK17+
- HiAuth3
安装、启动
#编译、构建项目
>cd HiAuth\hiaut-himall
>mvn clean install
>mvn spring-boot:run
验证authorization_code
模式认证
- 访问地址:http://127.0.0.1:8081
- 点击Login,会被重定向到HiAuth系统进行认证
- 认证通过后会被重定向回HiMall,此时HiMall也将持有登录状态
授权协议
本项目执行 MIT 协议
社区与作者
如果群二维码失效了,请先添加我的微信,然我我拉你入群。
相关文章:

Authorization Server 认证服务
Hi Auth HiAuth是一个开源的基于Oauth2协议的认证、授权系统,除了标准的Oauth2授权流程功能外,还提供了应用管理、用户管理、权限管理等相关功能。 在这个项目中你能够了解到如何基于spring-security-oauth2-authorization-server实现自己的Authorizat…...
研制过程评审活动(五)生产定型阶段
1. 生产定型阶段主要任务 生产定型的主要任务是对产品批量生产条件和质量稳定情况进行全面考核,以确认产品是否达到批量生产的标准。 需要生产定型的军工产品,在完成设计定型并经小批量试生产后、正式批量生产之前,进行生产定型。生产定型的条件和时间,由定委在批准设计…...
NCUT加权的NMF
矩阵定义 X:特征矩阵,矩阵的维度为体素数mx(指标数x被试数)n S:相似性矩阵,由特征矩阵的每一行计算皮尔逊相关得到mxm的方阵 D:度矩阵,度矩阵的对角线元素由相似性矩阵S对应的行和…...

从0开始的ios自动化测试
最近由于工作内容调整,需要开始弄ios自动化了。网上信息有点杂乱,这边我就按我的实际情况,顺便记录下来,看是否能帮到有需要的人。 环境准备 安装tidevice pip3 install -U “tidevice[openssl]” 它的作用是,帮你绕…...

vue3中使用jszip压缩文件
1、安装依赖 npm install jszip npm install file-saver --save 2、使用 <template><el-card class"mb15"><template #header><span>jszip</span></template><!-- 二维码容器 --><div id"qrCodeBox">&…...

React 虚拟DOM的前世今生
引文 通过本文你将了解到 什么是虚拟DOM?虚拟DOM有什么优势?React的虚拟Dom是如何实现的?React是如何将虚拟Dom转变为真实Dom? 一、前言 要了解虚拟DOM,我们先明确一下DOM的概念。 根据MDN的说法: 文档…...
Java环境变量配置
一、Path环境变量配置设置环境变量的值:C:\Program Files\Java\jdk-17\bin目前较新的JDK安装时会自动配置javac、java程序的路径到Path环境变量中去 ,因此,javac、java可以直接使用。注意:以前的老版本的JDK在安装的是没有自动配置…...

超详细解读!数据库表分区技术全攻略
更多内容可以关注微信公众号:老程序员刘飞 分区的定义 分区是一种数据库优化技术,它可以将大表按照一定的规则分成多个小表,从而提高查询和维护的效率。在分区的过程中,数据库会将数据按照分区规则分配到不同的分区中࿰…...

Redis高可用集群方案
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 @[TOC](文章目录)主从复制哨兵模式(sentinel)Cluster集群在生产过程中,Redis不一定会单独部署。因为一旦redis服务因为某些原因导致无法提供数,那么redis就不可用了。那么实现redis高可用的方式就…...

企业微信机器人发送消息
前言 随着科技的发展,各企业公司的业务不断发展,那么就需要强有力的沟通软件,其中企业微信、钉钉的能力得到了大众的认可,今天这篇文章就讲其中的一个功能-调用企业微信机器人(下文简称应用)进行消息传递。它的好处有哪些呢?自然是可以让相关人员及时追踪任务进度。 一、…...

使用PHP+yii2调用asmx服务接口
一.创建服务端 1:创建一个ASP.NET web应用程序 2:选择空的模板 3:系统生成项目目录 4:右键项目-添加项-新建项 5:选择Web 服务(ASMX) 6:选择之后项目中会有一个Test.asmx服务程序,…...
【042】904. 水果成篮[滑动窗口]
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果&…...
Linux基础知识(一)
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
Redis面试题
目录 Redis持久化机制:RDB和AOF Redis线程模型有哪些?单线程为什么快? Redis的过期键有哪些删除策略? Redis集群方案有哪些? redis事务怎么实现? 为什么redis不支持回滚? redis主从复制的原理是什么 …...

微服务之Eureka
🏠个人主页:阿杰的博客 💪个人简介:大家好,我是阿杰,一个正在努力让自己变得更好的男人👨 目前状况🎉:24届毕业生,奋斗在找实习的路上🌟 …...

日日顺于贞超:供应链数字化要做到有数、有路、有人
在供应链行业里面,关于“数字化”的讨论绝对是一个经久不衰的话题。 但关于这个话题的讨论又时常让人觉得“隔靴搔痒”,因为数字化变革为非一日之功,对于企业来说意味着投入和牺牲。企业既怕不做怕将来被淘汰,又怕投入过高、不达预…...

Js中blob、file、FormData、DataView、TypedArray
引言 最开始我们看网页时,对网页的需求不高,显示点文字,显示点图片就很满足了,所以对于浏览器而言其操作的数据其实并不多(比如读取本地图片显示出来,或上传图片到服务器),那么浏览器…...

CTFer成长之路之任意文件读取漏洞
任意文件读取漏洞CTF 任意文件读取漏洞 afr_1 题目描述: 暂无 docker-compose.yml version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-file-read-1:latestports:- 80:80启动方式 docker-compose up -d 题目Flag n1book{afr_1_solved} W…...

制造企业为何要上数字化工厂系统?
以目前形势来看,数字化转型是制造企业生存的关键,而数字化工厂管理系统是一个综合性、系统性的工程,波及整个企业及其供应链生态系统。数字化工厂系统所要实现的互联互通系统集成、数据信息融合和产品全生命周期集成,将方方面面的…...

Facebook广告投放的正确姿势:玩转目标定位
如果你正在投放 Facebook广告,那么你一定有过这样的经历:明明设置了目标受众,但是广告却没有带来转化。在这方面,你可能忽略了一个很重要的因素——目标定位。想要打造高质量、高曝光率的 Facebook广告,如何才能成功实…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...