SpringBoot实战(三十五)微服务集成OAuth2.0(UAA)

目录

    • 一、知识回顾
      • 1.1 什么是 OAuth2 协议?
      • 1.2 OAuth2 的4个角色
      • 1.3 OAuth2 的3种令牌
      • 1.4 OAuth2 的5种认证方式
      • 1.5 OAuth2 内置接口地址
    • 二、UAA介绍
      • 2.1 概述
      • 2.2 UAA的主要功能
      • 2.3 UAA 的应用场景
    • 三、微服务集成
      • 3.1 集成示例介绍
      • 3.2 集成测试

一、知识回顾

在进行微服务集成前,我们先来回顾一下 OAuth2.0 的基础知识。

1.1 什么是 OAuth2 协议?

OAuth2(Open Authorization 2.0) 协议是 RFC 6749 文件,是一种 用于授权的开放标准协议,用于通过第三方应用程序访问用户在某个服务提供商上存储的资源,而无需共享用户的凭证(例如用户名和密码)。

OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。…资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。

OAuth2.0 的运行流程如下图所示:

在这里插入图片描述

(A)用户打开客户端以后,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E)客户端使用令牌,向资源服务器申请获取资源。
(F)资源服务器确认令牌无误,同意向客户端开放资源。

简而言之:你要获取我(资源服务器)的资源的话,得先找他(授权服务器)授权。

1.2 OAuth2 的4个角色

OAuth2.0 认证过程中,涉及到的四个角色如下 :

  • 客户端(Client):代表资源所有者与授权服务器进行交互的应用程序。可以是Web应用程序、移动应用程序或第三方服务。
  • 资源所有者(Resource Owner):即用户或系统的代表,拥有受保护资源的所有权。
  • 授权服务器(Authorization Server):负责验证资源所有者的身份并颁发访问令牌(Access Token)给客户端。它通常是一个独立的服务器,可以与资源服务器分离或合并。
  • 资源服务器(Resource Server):存储受保护的资源,并根据令牌的有效性进行访问控制。资源服务器可以是一个或多个服务,可以授权服务器分离或合并。

1.3 OAuth2 的3种令牌

  • 授权许可(Authorization Grant):资源所有者授权客户端访问受保护资源的凭证,如:授权码、隐式授权、密码授权、客户端凭证等。
  • 令牌(Access Token):用于标识授权许可的凭证,包括访问令牌、刷新令牌和身份令牌等。
  • 令牌端点(Token Endpoint):客户端与授权服务器交互以获取或刷新令牌的API端点。

1.4 OAuth2 的5种认证方式

OAuth2.0 提供了五种认证方式:

授权类型grant_type适用场景安全性
授权码模式authorization_code有后端的 Web 应用
简化模式implicit纯前端应用(如 SPA)
密码模式password高度信任的客户端(如第一方应用)
客户端凭证模式client_credentials客户端访问自己的资源(M2M)
刷新令牌模式refresh_token获取新的访问令牌

这里我们举例的是 授权码模式,篇幅有限,没有集成数据库。如果需要支持其他模式,需要对 AuthorizationConfig.java 中的内容进行改造。

1.5 OAuth2 内置接口地址

OAuth2.0 内置了6个接口地址,如下所示:

  • /oauth/authorize:授权端点(核心)
  • /oauth/token:获取令牌端点(核心)
  • /oauth/confirm_access:用户确认授权提交端点
  • /oauth/error:授权服务错误信息端点
  • /oauth/check_token:用于资源服务访问的令牌解析端点
  • /oauth/token_key:提供公有密匙的端点,如果你使用JWT令牌的话

二、UAA介绍

  • 官方文档: https://docs.spring.io/spring-cloud-dataflow-samples/docs/current/reference/html/_security.html

2.1 概述

UAA(User Account and Authentication) 是 Cloud Foundry 提供的一个用户账户和认证服务,主要用于管理用户的身份验证和授权。UAA 支持多种认证机制,包括 Oauth2.0、OpenID Connect 等,能够为应用程序提供安全的用户管理和访问控制功能。UAA 的 核心功能是为用户提供统一的身份验证服务,并确保只有经过授权的用户才能访问特定的资源。

2.2 UAA的主要功能

UAA 的主要功能如下:

  1. 用户管理:UAA 允许管理员创建、管理和删除用户账户。用户可以通过用户名和密码进行登录,也可以通过其他身份提供者(如 LDAP、SAML 等)进行身份验证。
  2. OAuth2.0支持:UAA 实现了 OAuth2 协议,允许应用程序通过 OAuth2 进行授权和认证。OAuth2 是一种广泛使用的授权框架,允许用户授权第三方应用访问其资源,而无需共享其凭据。
  3. OpenID Connect支持:UAA 还支持 OpenID Connect,这是一种基于 OAuth2 的身份验证协议,允许应用程序验证用户的身份并获取用户的基本信息。
  4. 多租户支持:UAA 支持多租户架构,允许不同的组织或团队在同一 UAA 实例中管理各自的用户和权限。
  5. LDAP 集成:UAA 可以与 LDAP(轻量级目录访问协议)集成,允许企业使用现有的 LDAP 目录服务进行用户认证。通过 LDAP 集成,UAA 可以从 LDAP 服务器中获取用户信息,并将其映射到 UAA 中的用户角色和权限。

2.3 UAA 的应用场景

UAA 广泛应用于需要用户认证和授权的场景,特别是在微服务架构中。通过 UAA,开发者可以轻松地为多个微服务提供统一的身份验证和授权机制,而不需要每个服务都实现自己的认证逻辑。

Spring Cloud Data Flow 中,UAA 被用于保护数据流和任务的管理接口。通过 UAA,管理员可以控制哪些用户可以创建、部署和管理数据流和任务。UAA 还可以与 LDAP 集成,使得企业可以使用现有的 LDAP 目录服务来管理用户权限。


三、微服务集成

代码地址: https://gitee.com/acgkaka/SpringBootExamples/tree/master/springboot-mybatis-plus-oauth2.0

3.1 集成示例介绍

在示例项目中,包含两个核心服务:

  1. demo-eureka: 注册中心;
  2. demo-gateway: 网关中心;
  3. auth-server: 鉴权服务 – 相当于 “授权服务器”;
  4. **user-center: **用户服务 – 相当于 “资源服务器”。

包含五个基础启动包:

  1. common-spring-boot-starter: 基础公共包;
  2. jdbc-spring-boot-starter: JDBC数据库连接工具包;
  3. redis-spring-boot-starter: Redis缓存连接工具包;
  4. uaa-client-spring-boot-starter: “资源服务器” 工具包
  5. uaa-server-spring-boot-starter: “授权服务器” 工具包

整体项目目录结构如下:

在这里插入图片描述

“资源服务器” 工具包 uaa-client-spring-boot-starter 目录结构如下:

在这里插入图片描述

注意: 为了实现分布式鉴权,这里我们将token存到了redis缓存中。

“授权服务器” 工具包 uaa-server-spring-boot-starter 目录结构如下:

在这里插入图片描述

3.2 集成测试

1)启动本地redis和数据库,确保 mydb.sql 中的数据已被初始化。

2)启动所有服务,如下所示:

在这里插入图片描述

3)在 user-center 服务中,有测试接口:/user/list,如下所示:

在这里插入图片描述

我们直接使用 Postman 请求这个接口,如下所示:

在这里插入图片描述

可以看到,HTTP返回状态码为 401,返回内容中提示 unauthorized,没有权限,说明拦截成功。

4)在 auth-server 服务中,OAuth 2.0 默认的获取授权接口为:/oauth/token,如下所示:

在这里插入图片描述

我们输入相应的入参进行请求 token,这里我们以密码模式为例。如下所示:

  • 请求地址: http://localhost:8081/oauth/token?grant_type=password&username=ACGkaka&password=123456&client_id=app&client_secret=app

在这里插入图片描述

这里我们成功获取到了 token。

5)将 token 作为鉴权请求头,再次请求 user-center 中的接口,如下所示:

在这里插入图片描述

可以看到,原本被拦截的接口已经可以正常访问了,HTTP状态码也正常返回200了。

代码地址: https://gitee.com/acgkaka/SpringBootExamples/tree/master/springboot-mybatis-plus-oauth2.0

整理完毕,完结撒花~🌻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红果短剧安卓+IOS双端源码,专业短剧开发公司

给大家拆解一下红果短剧/河马短剧,这种看光解锁视频,可以挣金币的短剧APP。给大家分享一个相似的短剧APP源码,这个系统已接入穿山甲广告、百度广告、快手广告、腾讯广告等,类似红果短剧的玩法,可以看剧赚钱&#xff0c…

从0开始的操作系统手搓教程23:构建输入子系统——实现键盘驱动1——热身驱动

目录 所以,键盘是如何工作的 说一说我们的8042 输出缓冲区寄存器 状态寄存器 控制寄存器 动手! 注册中断 简单整个键盘驱动 Reference ScanCode Table 我们下一步就是准备进一步完善我们系统的交互性。基于这个,我们想到的第一个可以…

百度SEO关键词布局从堆砌到场景化的转型指南

百度SEO关键词布局:从“堆砌”到“场景化”的转型指南 引言 在搜索引擎优化(SEO)领域,关键词布局一直是核心策略之一。然而,随着搜索引擎算法的不断升级和用户需求的多样化,传统的“关键词堆砌”策略已经…

Python ❀ Unix时间戳转日期或日期转时间戳工具分享

设计一款Unix时间戳和日期转换工具,其代码如下: from datetime import datetimeclass Change_Date_Time(object):def __init__(self, date_strNone, date_numNone):self.date_str date_strself.date_num date_num# 转时间戳def datetime2timestamp(s…

【目标检测】【NeuralPS 2023】Gold-YOLO:通过收集与分发机制实现的高效目标检测器

Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism Gold-YOLO:通过收集与分发机制实现的高效目标检测器 0.论文摘要 在过去的几年中,YOLO系列模型已成为实时目标检测领域的领先方法。许多研究通过修改架构、增强数…

π0源码解析——一个模型控制7种机械臂:对开源VLA sota之π0源码的全面分析,含我司的部分落地实践

前言 ChatGPT出来后的两年多,也是我疯狂写博的两年多(年初deepseek更引爆了下),比如从创业起步时的15年到后来22年之间 每年2-6篇的,干到了23年30篇、24年65篇、25年前两月18篇,成了我在大模型和具身的原始技术积累 如今一转眼…

K8s 1.27.1 实战系列(六)Pod

一、Pod介绍 1、Pod 的定义与核心设计 Pod 是 Kubernetes 的最小调度单元,由一个或多个容器组成,这些容器共享网络、存储、进程命名空间等资源,形成紧密协作的应用单元。Pod 的设计灵感来源于“豌豆荚”模型,容器如同豆子,共享同一环境但保持隔离性。其核心设计目标包括…

企业日常工作中常用的 Linux 操作系统命令整理

Linux 操作系统命令整理 在企业级运维、开发和日常工作中,Linux 命令是绕不开的核心技能。不论是日志排查、进程管理,还是高效运维优化,掌握这些命令都能让你事半功倍!本篇文章整理了自己在日常工作中积累最常用的 Linux 命令&am…

实现NTLM relay攻击工具的Python代码示例

以下是一个实现NTLM relay攻击工具的Python代码示例,该工具可以完成自动扫描IP、配置相关协议、获取hash、自动化设置和执行攻击步骤等功能。 代码思路 IP扫描:使用scapy库进行IP扫描,找出活跃的IP地址。Responder配置:自动配置…

Kotlin和Java区别

哈哈哈,前段时间,面试的时候,突然问到我Kotlin和Java的区别,一下子把我问懵逼了,确实没遇到问这个的,想了下,说了下Kotlin的编译时空检查机制,代码更简洁,很多封装好的AP…

【大模型】大模型分类

大模型(Large Models)通常指参数量巨大、计算能力强大的机器学习模型,尤其在自然语言处理(NLP)、计算机视觉(CV)等领域表现突出。以下是大模型的常见分类方式: 1. 按应用领域分类 …

centos中使用svn整理

centos中使用svn整理 1. 安装 SVN 客户端2. 常见 SVN 用法及示例2.1 创建 SVN 仓库2.2 检出(Checkout)项目2.3 添加文件到版本控制2.4 提交(Commit)更改2.5 更新(Update)本地工作副本2.6 查看文件状态2.7 查…

游戏元宇宙崛起:AI代理IP驱动虚拟世界“无限可能”​

在科技飞速发展的当下,游戏元宇宙正以一种前所未有的姿态崛起,它犹如一颗璀璨的新星,吸引着无数人的目光。而AI代理IP,正成为驱动这个虚拟世界展现“无限可能”的关键力量。 「快代理|11年专注企业级代理IP云服务 —…

基于Servlet + JSP 的物业管理系统

Javaweb物业管理系统|Java|Servlet | JavaWeb|web网站| 分管理员登录,用户登录。 一、内容 项目源码 配套文档 环境部署教程 项目运行教程 二、技术介绍 技术应用: Servlet JavaBean CSS JSP 开发环…

Billing的patient balance的2个例子

Billing的patient balance的2个例子 第一个例子 下面是 0852医院的00005641的计算: 主保险 Allowable: 78.81 Applied:61.79 CoInsurance:17.02 第二保险 Allowable: 15.76 Applied:15.76 我们在计算时是用主保险的Allowable: 78.81&#xff…

哪些培训课程适合学习PostgreSQL中级认证知识?

PostgreSQL 中级工程师 PGCP 认证培训:由重庆思 庄经验丰富的讲师郑全老师授课。课程内容系统全面,涵盖了 PostgreSQL 数据库从基础到高级的知识,包括数据库的安装、建库、用户与角色管理等基础内容,也有性能调优、索引原理与应用…

计算机二级MS之PPT

声明:跟着大猫和小黑学习随便记下一些笔记供大家参考,二级考试之前将持续更新,希望大家二级都能轻轻松松过啦,过了二级的大神也可以在评论区留言给点建议,感谢大家!! 文章目录 考题难点1cm25px…

第5章 使用OSSEC进行监控(网络安全防御实战--蓝军武器库)

网络安全防御实战--蓝军武器库是2020年出版的,已经过去3年时间了,最近利用闲暇时间,抓紧吸收,总的来说,第5章开始进入主机安全(HIDS)领域了,2022年的时候有幸做过终端安全一段时间&a…

Android 低功率蓝牙之BluetoothGattCallback回调方法详解

BluetoothGattCallback 是 Android 中用于处理蓝牙低功耗(BLE)设备通信的核心回调类。它负责处理与 BLE 设备的连接、服务发现、数据读写等操作的结果。以下是对 BluetoothGattCallback 的详细解析: 1. onConnectionStateChange 触发时机&am…

DeepSeek group-limited expert routing和负载均衡

Ref https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/model.py GitHub - deepseek-ai/EPLB: Expert Parallelism Load Balancer DeepSeek-V3 Technical Report DeepSeek的路由方法 class Gate(nn.Module):def __init__(self, args: ModelArgs):super().__…