Spring OAuth2

Spring Security OAuth2详解 创建认证成功处理器和认证失败处理器,处理登录成功和登录失败请求@Component@Slf4j@Autowired@Autowired@Override// 1. 从请求头中获取 ClientIdthrow new UnapprovedClientAuthenticationException("请求头中无client信息");// 2. 通过 ClientDetailsService 获取 ClientDetails。 阅读详情

Spring OAuth2

OAuth2协议在Spring Resource中的实现为Spring OAuth2。Spring OAuth2分为OAuth2 Provider和OAuth2 Client

OAuth2 Provider

OAuth2 Provider负责公开被OAuth2保护起来的资源。OAuth2 Provider需要配置代表用户的OAuth2客户端信息,通过管理和验证OAuth2令牌来控制客户端是否可以访问受保护资源,同时还必须为用户提供认证API接口

OAuth2 Provider的角色被分为Authorization Service(授权服务)和Resurce Service(资源服务)。所有获取令牌的请求都将会在Spring MVC controller endpoints中处理,并且访问受保护资源服务的处理流程将会放在标准Spring Security请求过滤器中

配置一个授权服务必须要实现以下endpoints:

  • AuthorizationEndpoint:用来作为请求者获得授权的服务,默认URL为/oauth/authorize

  • TokenEndpoint:用来作为请求者获得令牌的服务,默认URL为/oauth/token

配置一个资源服务必须要实现的过滤器:

  • OAuth2AuthenticationProcessingFilter:用来作为认证令牌的一个处理流程过滤器,只有当过滤器通过之后,请求者才能获取受保护资源

Authorization Server配置

配置Authorization Server时,需要考虑客户端从用户获取访问令牌的类型(authorization_code:授权码类型;password:密码模式;client_credentials:客户端模式;implicit:简化模式;refresh_token:刷新access_token)。Authorization Server需要配置客户端的详细信息和令牌服务的实现

继承AuthenticationServerConfigurerAdapter在类上添加@EnableAuthorizationServer注解,开启Authorization Server功能,注入到IOC容器中,并实现以下配置:

  • ClientDetailsServiceConfigurer:配置客户端信息

  • AuthorizationServerEndpointsConfigurer:配置授权Token的节点和Token服务

  • AuthorizationServerSecurityConfigurer:配置Token节点的安全策略

配置客户端详情

ClientDetailsServiceConfigurer。客户端配置信息既可以放在内存中,也可以放在数据库中,需要配置如下信息。可以通过实现ClientDetailService接口管理:

  • clientId:客户端Id,唯一

  • secret:客户端密码

  • scope:客户端的域,用来限制客户端的访问范围,如果为空,客户端拥有全部的访问权限

  • authorizedGrantTypes:认证类型

  • authorities:权限信息

管理令牌

AuthorizationServerTokenServices接口定义了一些操作使得可以对令牌进行一些必要的管理,请注意以下几点:

  • 当一个令牌被创建,必须对其进行保存,这样当一个客户端使用这个令牌对资源服务进行请求的时才能引用这个令牌

  • 当一个令牌是有效的,可以被用来加载身份信息,里面包含这个令牌的相关权限

我们可以使用DefaultTokenServices类,这个类实现了AuthorizationServerTokenServices接口,可以使用其提供的方法来修改令牌格式和令牌存储。默认创建令牌时使用随机值来进行填充,除了持久化令牌是委托TokenStore接口来实现外,这个类几乎做了所有的事情。TokenStore实现:

  • InMemoryTokenStore:默认实现,存储在内存中

  • JdbcTokenStore:基于JDBC的实现版本,令牌会存储在关系型数据库中

  • JwtTokenStore:令牌相关数据进行编码,但其撤销一个已经授权令牌会很困难,通常用来处理
    一个生命周期较短的令牌已经撤销刷新令牌

  • RedisTokenStore:令牌存储在redis中

配置授权类型

授权使用AuthorizationEndpoint端点进行控制,可以使用AuthorizationServerEndpointsConfigurer对象实例进行配置,默认开启了所有验证类型,除了密码类型的验证,需要配置authenticationManager才能开启:

  • authorizationCodeServices:设置授权码服务(即AuthorizationCodeServices的实例对象),主要用于“authorization_code”授权码类型模式

  • tokenStore:设置令牌存储类型,默认内存存储

  • userDetailsSercice:如果注入了一个UserDetailsService,refresh token grant将对用户状态进行校验,以保证用户处于激活状态

  • authenticationManager:通过注入AuthenticationManager启用密码授权模式

  • redirectResolver:配置重定向解析器,实现RedirectResolver接口

  • tokenGranter:TokenGranter完全控制授予流程并忽略上面的其他属性

配置授权端点的URL

AuthorizaitonServerEndpointsConfigurer可以通过pathMapping()方法来配置端点URL链接,它有两个参数:

  • 第一个参数:String类型,这个端点URL的默认链接

  • 第二个参数:String类型,需要替换成的URL链接

以上字符串都以“/”字符开始的字符串,框架的默认URL链接如下列表:

  • /oauth/authorize:授权端点

  • /oauth/token:令牌端点

  • /oauth/confirm_access:用户确认授权提交端点

  • /oauth/error:授权服务错误信息端点

  • /oauth/check_token:用户资源服务访问的令牌解析端点

  • /oauth/token_key:提供公有密钥的端点,如果使用JWT令牌

强制使用SSL

通过Spring Security的requiresChannel约束来保证安全,是否启用SSL可以通过AuthorizationServerEndpointsConfigurer配置对象的sslOnly()方法来设置。如果设置强制使用SSL Spring Security会把不安全的请求通道重定向到一个安全通道。AuthorizationServerSecurityConfigurer源码

    public AuthorizationServerSecurityConfigurer sslOnly() {
        this.sslOnly = true;
        return this;
    }

    @Override
    public void init(HttpSecurity http) throws Exception {

        registerDefaultAuthenticationEntryPoint(http);
        if (passwordEncoder != null) {
            ClientDetailsUserDetailsService clientDetailsUserDetailsService = new ClientDetailsUserDetailsService(clientDetailsService());
            clientDetailsUserDetailsService.setPasswordEncoder(passwordEncoder());
            http.getSharedObject(AuthenticationManagerBuilder.class)
                    .userDetailsService(clientDetailsUserDetailsService)
                    .passwordEncoder(passwordEncoder());
        }
        else {
            http.userDetailsService(new ClientDetailsUserDetailsService(clientDetailsService()));
        }
        http.securityContext().securityContextRepository(new NullSecurityContextRepository()).and().csrf().disable()
                .httpBasic().realmName(realm);
        if (sslOnly) {
            http.requiresChannel().anyRequest().requiresSecure();
        }
    }

资源服务配置

一个资源服务提供一些受token令牌保护的资源,Spring OAuth提供者是通过Spring Security authentication filter即验证过滤器来实现保护,可以通过@EnableResourceServer注解到一个@Configuration配置类,并且必须使用ResourceServerConfigurer这个配置对象来进行配置,可以选择继承ResourceServerConfigureAdapter然后复写其中的方法:

  • tokenServices:ResourceServerTokenServices类的实例,实现令牌服务

  • resourceId:这个资源服务的ID,这个属性是可选的,但推荐设置并在授权服务中进行验证

  • 其他的拓展属性例如tokenExtractor令牌提取器用来提取请求中的令牌

  • 请求匹配器,用来设置需要进行保护的资源路径,默认情况下是受保护资源服务的全路径

  • 受保护资源的访问规则,默认规则是简单的身份认证

  • 其他的自定义权限保护规则通过HttpSecurity来进行配置

@EnableResourceServer注解自动增加一个类型为OAuth2AuthenticationProcessingFilter的过滤器链

    @Configuration
    @EnableResourceServer
    public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

        @Autowired
        private SecurityProperties properties;
        @Autowired(required = false)
        private ResourceMatcher resourceMatcher;

        @Override
        public void configure(HttpSecurity http) throws Exception {
            if (properties.isCustomResourceMatcher() && resourceMatcher != null) {
                http
                    .requestMatcher(resourceMatcher)
                    .authorizeRequests()
                    .anyRequest().authenticated();
            } else {
                http
                    .antMatcher("/api/**")
                    .authorizeRequests()
                    .anyRequest().authenticated();
            }
        }

        @Override
        public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
            resources.resourceId("default");
        }
    }

ResourceServerTokenServices是组成授权服务的另一半,如果你的授权服务和资源服务在同一个应用程序上,可使用DefaultTokenServices

SpringOAuth2授权流程分析 阅读详情

相关推荐

SpringSecurity OAuth2:授权服务器与资源服务器配置

Spring Security OAuth2提供了强大而灵活的机制,用于实现标准化的授权服务器和资源服务器。通过合理配置授权服务器,开发者可以自定义客户端注册、授权类型、令牌策略等,满足不同应用场景的需求。令牌存储策略的选择应基于系统性能、安全性和部署环境等因素,JWT令牌因其自包含特性在微服务架构中尤为适用。资源服务器配置则专注于保护API资源,通过URL级别和方法级别的安全控制,确保只有持有有效令牌且具备适当权限的请求才能访问受保护资源。

程序媛学姐的博客 2383

Spring中的OAuth2

Auth” 表示 “授权” Authorization“O” 是 Open 的简称,表示 “开放”连在一起就表示,OAuth2是一种开放授权协议。

qq_45726327的博客 3531

Spring Security Oauth2

1用户认证需求分析 1.1 用户认证与授权 什么是用户身份认证? 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的用户身份认证表现形式有:用户名密码登录,指纹打卡等方式。 什么是用户授权? 用户认证通过后去访问系统的资源,系统会判断用户是否拥有访问资源的权限,只允许访问有权限的系统资源,没有权限的资源将无法访问,这个过程叫用户授权。 1.2 单点登录需求 一个项目可以包括多个子项目,如:学习系统,教学管理中心、系统管理中心等,为了提高用户体验性需要实现用户只认证一次

Feng_ZiYou的博客 2152

SpringSecurity之Oauth2介绍

Oauth2认证的简单介绍 简介 第三方认证技术方案最主要是解决认证协议的通用标准问题,因为要实现跨系统认证,各系统之间要遵循一定的接口协议。 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。 业界提供了OAUTH的多种实现如PHP、JavaScript、J...

- 1万+

使用Spring boot 快速 搭建 OAuth2 Server

目前国内很多平台(QQ,微信,微博等)都提供了OAuth2服务,本文不是针对OAuth2协议的教程,故阅读本文之前,如果对OAuth2协议还不熟悉的同学可查询相关资料,本文旨在以最简单的方式,使用Spring OAuth2 框架,快速搭建OAuth2服务。 前提阅读本文之前,你需要了解: Spring Boot Spring MVC Spring Security Postman Google 浏览

github_39939645的博客 9875

电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)

本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。

whisky的博客 758

spring security OAuth2 支持

是向授权服务器注册的客户端。客户端必须先向授权服务器注册,然后才能启动授权授予流(如authorization_code或client_credentials),在客户端注册期间,客户端被分配一个唯一的客户端标识符(clientId),(可选地)一个客户端秘密(clientSecret)(取决于客户端类型),以及与其唯一客户端标识符相关联的元数据。客户机的元数据可以是面向人的显示字符串(如客户机名称),也可以是特定于协议流的项(如有效重定向uri列表)。

nmg_tl的博客 2930

【Azure 架构师学习笔记】- Azure Databricks (1) - 环境搭建

Databricks 已经成为了数据科学的必备工具,今时今日你已经很难抛开它来谈大数据,它常用于做复杂的ETL中的T, 数据分析,数据挖掘等,特别适用于做数据建模,机器学习等。那么顺应时代,现在也来看看这个工具的内容。首先要有一个环境,基于Azure 的Databricks简称ADB。托管在Azure 上的Databricks已经被Azure进行了很大的优化, 在搭建时只需要简单的几步即可拥有一个环境,不过要提醒一句ADB的集群并不便宜,用完马上删掉或停止, 否则一晚过百美金就会烧掉。

MVP黄钊吉(發糞塗牆) 2299

基于spring-security-oauth2实现oauth2(持续更新)

为什么80%的码农都做不了架构师?>>> ...

weixin_34080571的博客 10万+

手把手教你用Python+GDAL处理0.5米吉林一号卫星影像(附代码)

本文详细介绍了如何使用Python和GDAL处理吉林一号0.5米高分辨率卫星影像,包括环境配置、数据预处理、分辨率融合、植被指数计算及地物分类等关键步骤。通过实战代码示例,帮助开发者高效处理大尺寸遥感数据,解决资源崩溃和算法选择问题,提升遥感影像分析能力。

weixin_30892037的博客 129

YOLOv11改进 | Conv篇 | AKConv轻量级架构下的高效检测(附代码 + 修改方法 + 二次创新)

本文给大家带来的改进内容是AKConv是一种创新的变核卷积,它旨在解决标准卷积操作中的固有缺陷(采样形状是固定的),AKConv的核心思想在于它为卷积核提供了任意数量的参数和任意采样形状,能够使用任意数量的参数(如1, 2, 3, 4, 5, 6, 7等)来提取特征,这在标准卷积和可变形卷积中并未实现​​。AKConv能够根据硬件环境,使卷积参数的数量呈线性增减非常适用于轻量化模型的读者)。

Snu77的博客 1万+

spring cloud OAuth2

1.spring cloud oauth的原理 2.spring cloud oauth的配置 3.spring cloud oauth的实例 4.总结

a18792721831的博客 4571

(ICLR 2025)【源码讲解+复现】TIMER-XL: Long-Context Transformers for Unified Time Series Forecasting

本文提出了一种统一的多变量时序预测模型Timer-XL,其核心创新包括:1)采用自回归解码器架构,将多变量时序预测统一为next-token预测问题;2)设计TimeAttention机制,通过相对位置编码和因果掩码捕获时序位置和变量间交互;3)支持长上下文预训练以提升零样本迁移能力。模型架构包含嵌入层、时间感知注意力块和预测头,采用MSE损失进行端到端训练。实验表明该方法在多种时序任务上表现优异,特别是在长跨度预测和少样本场景下。代码实现提供了完整的模型定义、数据加载和训练流程,支持自定义配置参数。

1147

Spring Security和oauth2的关系

网上有很多SpringSecurity和oauth2的介绍,但是对于初学者来说,上手比较复杂,本篇从原理上梳理一下两者之间的联系和区别参见【SpringSecurity】基本功能介绍springsecurity的核心功能主要包括认证(你是谁)通过注解开启简单来说,就是需要登录,你需要输入用户名和密码,才能访问某个url。授权(你能干什么)不需要通过指定的开关开启,而是通过配置来增加授权规则来生效,不增加授权规则就不生效一种是同步session不需要再次输入用户名和密码。...

geejkse_seff的博客 4247

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(二)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包exp

慕羽★的博客 1648

基于YOLOv10的PCB电子元件智能识别系统设计与实现

数据预处理模块:负责对原始PCB图像进行标注、增强和格式转换模型训练模块:基于YOLOv10架构进行模型训练和优化推理检测模块:加载训练好的模型进行实时检测用户界面模块:提供友好的交互界面,方便用户操作和结果可视化YOLO(You Only Look Once)系列算法自2016年提出以来,经历了多次迭代更新。YOLOv1-v3:奠定了YOLO系列的基础架构YOLOv4-v7:引入大量优化技巧和网络结构改进YOLOv8-v9:进一步优化模型结构和训练策略YOLOv10。

YOLO 157

Spring Security Oauth2 JWT

1 用户认证分析 1.1 认证与授权 身份认证 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的用户身份认证表现形式有:用户名密码登录,指纹打卡等方式。说通俗点,就相当于校验用户账号密码是否正确。 用户授权 用户认证通过后去访问系统的资源,系统会判断用户是否拥有访问资源的权限,只允许访问有权限的系统资源,没有权限的资源将无法访问,这个过程叫用户授权。 1.2 单点登录 用户访问的项目中,至少有3个微服 务需要识别用户身份,如果用户访问每个微服务都登录一次就太麻烦了,

chinusyan的专栏 5435

用群辉NAS打造影视墙(Jellyfin篇)

之前的文章提到过,用群辉NAS组建影视播放系统可以采用官方提供的Video Station套件,不过影视信息配比较差,响应速度也欠佳,今天我们就聊聊别的套件。在影音媒体方面,常见的还有Emby、Plex、Jellyfin。本文主讲Jellfin的原因是它胜在免费,而且功能比较齐全,完全够用。详细信息可以参考Jellyfin的官网:https://jellyfin.org/

dgnankai的专栏 7325

spring security oauth2 教程

理解OAuth 2.0 http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth 2.0基本概念和运作流程 https://segmentfault.com/a/1190000013467122 架构图 验证流程 spring security oauth2源码架构图 绿色的代表实体类,蓝色的代表接口方法 ...

tom和cat的博客 5294

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring Security OAuth2 入门

1. 概述 2. 引入 Spring Security OAuth2 依赖 3. 配置资源服务器 4. 配置授权服务器 4.1 授权码模式 Spring Security Setting 4.2 密码模式 4.3 简化模式 4.4 客户端模式 4.5 如何选择? 4.6 为什么有 Client 编号和密码 5. 刷新令牌 5.1 获取刷新令牌 5.2 “刷新”访问令牌 5.3 为什么需要有刷新令牌 6. 删除令牌 6.1 删除访问令牌 6.2 删除刷新令牌 6.3 RFC

m0_62714732的博客 9860

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spring Cloud 之 Gateway、Spring Security、Oauth2 的整合

目录1)learn-shop-public-auth(认证中心)1、生成JKS2、添加pom.xml中主要依赖3、添加主要类3.1 目录结构及主要类说明3.2 WebSecurityConfig3.4 JwtTokenEnhancer3.5 CustomUserDetailsService4、添加公钥访问地址5、添加配置文件2)learn-cloud-gateway(资源中心)1、目录结构2、AuthorizationManager3、ResourceServerConfig4、配置文件 源码地址:看这里,

XiaoY的专栏 8228

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring oauth2的token timeout

这几天绕了一个大圈子,内容其实很简单,想为后台基于Spring boot, Spring oauth2的应用加上session timeout的功能。 整个应用架构比较简单: UI 基于Spring oauth2的auth service 基于Spring boot的service 众所周知,oauth2下是使用token作为认证的凭证, 基本流程是这样的: 上图所示模块跟我们架构中...

pushme_pli的专栏 2815

Spring Boot + Spring Security OAuth2示例

ss

_William_Cheung的博客 3060

Spring Security OAuth2 组件

简单来说,是 Spring Security 框架的一个模块,专门用来帮助你在 Spring 应用中轻松实现OAuth 2.0和协议。它的核心目标不是传统的用户名密码认证,而是授权委托 (Delegated Authorization)。是实现 OAuth 2.0 协议栈的官方 Spring 模块,用于构建安全的、基于令牌的授权系统。它解决了授权委托问题,避免了密码的直接共享。现代架构下,其功能主要分为客户端 (Client)和资源服务器 (Resource Server),而。

u011091936的博客 1337

基于Spring Security的Oauth2授权实现

前言 经过一段时间的学习Oauth2,在网上也借鉴学习了一些大牛的经验,推荐在学习的过程中多看几遍阮一峰的《理解OAuth 2.0》,经过对Oauth2的多种方式的实现,个人推荐Spring Security和Oauth2的实现是相对优雅的,理由如下: 1、相对于直接实现Oauth2,减少了很多代码量,也就减少的查找问题的成本。 2、通过调整配置文件,灵活配置Oauth相关配置。 3、通过...

曾国藩《家训喻纪泽》 3万+

Spring Security oAuth2简介

概述 本章节的目的是帮助大家快速上手使用 Spring 提供的 Spring Security oAuth2 搭建一套验证授权及资源访问服务,帮助大家在实现企业微服务架构时能够有效的控制多个服务的统一登录、授权及资源保护工作 什么是 oAuth oAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用...

京北游戏官方 2万+
上一篇: 保护Web应用
下一篇: Spring Cloud OAuth Security 实战Spring Cloud整合OAuth、Security
炒栗子不加糖
博客等级 码龄10年 68粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值