从 Spring security oauth2 client 自动配置中获取 AccessToken

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】 阅读详情

问题

使用 Spring security oauth2 client 实现授权码模式,可以不用手动拼接url请求code和token等信息,用户登录成功之后可以在SuccessHandler中获取当前用户的信息。如果还想获取用户信息以外的授权资源,必须要有AccessToken,要怎么获取呢?先看下如何获取用户信息

依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

配置文件

spring:
  security:
    oauth2:
      client:
        provider:
          github:
            authorization-uri: https://github.com/login/oauth/authorize
            token-uri: https://github.com/login/oauth/access_token
            user-info-uri: https://api.github.com/user
            user-name-attribute: id
        registration:
          demo:
            client-id: xxxxx
            client-secret: xxxxx
            client-name: oauth2-demo
            provider: github
            scope: profile
            redirect-uri: http://localhost:8080/oauth2/callback
            client-authentication-method: basic
            authorization-grant-type: authorization_code
  http:
    log-request-details: true

logging:
  level:
    root: info
    web: debug

配置类

package com.example.demo.configurations;

import com.example.demo.handler.Oauth2AuthenticationSuccessHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class OAuth2SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Autowired
    private Oauth2AuthenticationSuccessHandler oauth2AuthenticationSuccessHandler;

	@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .oauth2Login()
                .redirectionEndpoint()
                .baseUri("/oauth2/callback")
                .and()
				.successHandler(oauth2AuthenticationSuccessHandler)
        ;
    }
}

SuccessHandler

package com.example.demo.handler;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Slf4j
@Component
public class Oauth2AuthenticationSuccessHandler implements AuthenticationSuccessHandler {

    @Autowired
    public Oauth2AuthenticationSuccessHandler() {
    }

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
                                        HttpServletResponse response,
                                        Authentication authentication) throws IOException {
        OAuth2User oAuth2User = (OAuth2User) authentication.getPrincipal();
        if (oAuth2User != null) {
            log.info(oAuth2User.toString());
        }
        response.sendRedirect("/index.html");
    }
}

index.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>OAuth2 Demo</title>
    </head>
    <body>
        <p>已登录</p>
    </body>
</html>

分析

关键代码 OAuth2User oAuth2User = (OAuth2User) authentication.getPrincipal(); ,在 IDEA 中查找跟Authentication相关的类:OAuth2AuthenticationToken,OAuth2AuthorizedClient,然后百度,找到一个非常有用的spring security 官方文档:链接,得到解决方案:使用 @RegisteredOAuth2AuthorizedClien 注解,登录成功后访问 http://localhost:8080/token 即可看到 AccessToken

HelloController

package com.example.demo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@Slf4j
public class HelloController {
    @GetMapping("/token")
    @ResponseBody
    public String token(@RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient) {
        return authorizedClient.getAccessToken().getTokenValue();
    }
}
Spring 使用 Oauth2的第三方对接和token 本文章不对token的验证操作,只是第三方的模块对Oauth2的使用,使用场景,对一整套系统进行模块化开发,子模块的api采用主枝模块的Oauth2进行安全性验证 在pom.xml中添加依赖 org.springframework.security.oauth spring-security-oauth2 在dev.yml文件中添加 security:   oau 阅读详情

相关推荐

Spring Security使用记录

文章目录**1.概念介绍****1.1权限管理****1.2完成权限管理需要三个对象****1.3Spring Security****1.3.1创建web工程并导入jar包** 1.概念介绍 1.1权限管理 权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源。权限管理几乎出现在任何系统中,前提是需要有用户和密码认证的系统。 在权限管理的概念中,有两个重要的名词: 认证:通过用户名和密码成功登陆系统之后,让系统得到当前用户的角色身份 授权:系统根据当前用户的角色,

chenzeyu110的博客 693

SpringSecurity整合OAuth2

SpringSecurity整合OAuth2一、概述1.1 OAuth2.0 是什么?1.2 OAuth2.0 角色解释1.3 OAuth 2.0 运行流程1.4 OAuth 2.0 授权模式二、密码模式 一、概述 1.1 OAuth2.0 是什么? OAuth(Open Authorization)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。OAuth 允许用户提供一个令牌,而不是用户名和密码来访问他们存放

残影的博客 3044

【Spring Security】authorization server 认证服务器

Spring Security入门到精通

u014416842的博客 4430

spring cloud oauth2 授权码认证

springcloudoauth2授权码认证 ******************************* 认证服务器:authorization-server ********************* 配置文件 spring: application: name: authorization-server server: port: 80...

weixin_43931625的博客 1717

Spring Boot实战:从零搭建OAuth2授权码模式,深入理解Spring Security OAuth2核心流程

OAuth2是一种开放授权标准协议,它允许用户授权第三方应用访问其存储在另一服务提供者上的资源,而无需共享其凭证。其核心原理是通过引入授权层,将资源拥有者、客户端、授权服务器和资源服务器分离,使用访问令牌代替密码进行授权。这项技术的核心价值在于为Web应用和API提供了安全、标准化的身份验证与授权解决方案,极大地提升了系统的安全性和用户体验。在微服务架构、第三方登录(如微信、GitHub登录)以及API网关等场景中,OAuth2已成为事实上的标准。本文聚焦于OAuth2中最经典、最安全的授权码模式,通过一个

405

Spring Security OAuth 2.0 源码深度解析:从协议原理到实战扩展

OAuth 2.0 作为现代应用授权的核心框架,定义了资源所有者、客户端、授权服务器和资源服务器四种角色,通过授权码、隐式等流程实现安全的三方授权。其核心原理在于通过 state 参数防范 CSRF 攻击,并利用访问令牌(access_token)代理用户权限。在技术实现上,Spring Security 通过过滤器链(如 OAuth2AuthorizationRequestRedirectFilter 和 OAuth2LoginAuthenticationFilter)将协议抽象为具体的 Java 对象协

weixin_34122810的博客 320

Spring Security实现OAuth2协议及实战

OAuth2是目前最流行的授权协议,用来授权第三方应用,获取用户数据。举个例子:快递员想要进入小区,有3种方式。1是业主远程开门,2是业主告诉门禁密码,3是使用令牌(Oauth2)。如图:令牌和密码的区别:令牌相当于火车票,密码相当于是钥匙。令牌是短期的,自动失效。密码是长期有效。令牌是可以撤销的,撤销立即生效。密码一般不允许他们撤销。令牌有权限范围,如车票座位为10车A15座。密码一般是完整权限。第三方登录演示(网易云客户端利用QQ扫码登录)

qq_43372633的博客 3005

Carla-编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?

编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?不妨看看这个!

DSK_981029的博客 2573

Spring Security Oauth2:RedisTokenStore(一)之Token内容揭秘

Spring Security Oauth2 之RedisTokenStore Spring Security Oauth2 存储Token的方式有多种

既无风雨也无晴 4万+

宽带阻抗匹配的工程实现-第一步,端口驻波仿真

其实阻抗匹配我工作以来经常说,也经常做,但是基本上都是直接在印制板上进行调试。现在想先用仿真软件直接设计出来,才发现很多东西嘴上说容易,想做出来太难了。所以准备写一些文章,记录一下碰到的问题。

pp_0604的博客 2376

射频电路设计——射频器件基础

本文仅供自己复习使用,请勿转载! 射频电路制作方法 MCM工艺 CMOS工艺 趋肤效应、深度 频率越高趋肤效应越明显 高频器件 高频电阻 绕线的比贴片的多一个电感,是因为绕线的因为是线绕制的,只有有线就会有电感,所以绕线电阻等效模型会比贴片的多一个电感 多晶硅电阻模型 深线性区MOS电阻 高频电阻的频率响应 记忆的话就后面的频率特性有点像电容的 高频电容 作用 单层贴片式电容 多层贴片式电容 MIM电容 MOM电容 由于是并联的,所以总的电容值是单个的直接相加 PN结电容 M.

输出每日所学,供大家学习使用 7149

spring-security-oauth2授权服务原理

本文为Spring Security OAuth2 授权服务的源码解析

onePlus5T的博客 1488

FMQL开发环境实战:从零构建国产FPGA SoC的软件基石

本文详细解析了构建国产复旦微FMQL FPGA SoC软件开发环境的完整流程。针对开发者在环境搭建中遇到的核心痛点,文章深入剖析了Procise、IAR与Vivado三大工具的协同角色与版本选择,提供了从软件下载、安装避坑到核心配置的实战指南,并总结了常见问题的排查方法,旨在帮助开发者高效跨过FMQL开发的“第一道坎”。

weixin_29215391的博客 126

Spring Security OAuth2深度配置:Google、GitHub、Azure AD三大提供商实战指南

OAuth 2.0是现代应用实现第三方身份认证与授权的核心协议,它通过授权码等流程,在保障安全的前提下,允许用户使用现有账户(如Google、GitHub)登录其他应用,而无需共享密码。其技术价值在于实现了安全的委托授权,简化了用户登录流程,并让应用能够有限度地访问用户在资源服务器上的数据。这一机制广泛应用于单点登录(SSO)、API访问授权及用户画像构建等场景。在实际工程实践中,不同提供商(如Google、GitHub、Azure AD)对标准的实现存在显著差异,涉及**刷新令牌**的发放策略、**API

weixin_30458043的博客 395

Rk3128投影仪救砖操作和固件分享思路

大家搞一条比较硬的东西,插入耳机口,就可以进入刷机模式了的,我的机器是这样的,大家也可以试试。(看不懂可以往下看)

MMX7088的博客 1万+

独立游戏之路:Tap篇 -- 个人开发者上架TapTap步骤和注意事项

作为一名游戏开发者,将自己的独立游戏上架到 TapTap 平台是一个不错的选择。TapTap 是一个拥有大量用户的游戏社区平台,上架游戏可以让更多的玩家发现和体验你的游戏。TapTap 是一个游戏社区平台,用户可以在平台上下载和分享游戏。TapTap 拥有大量的用户,并且用户活跃度高,这为独立游戏开发者提供了一个很好的展示和推广平台。进入TapTap开发者服务后台。

陈言必行 -- Unity游戏开发领域优质博主 6408

TensorFlow Web门户集成OAuth2.0单点登录:Spring Security实战指南

单点登录是现代企业应用集成的核心需求,旨在解决多系统间用户身份认证分散、体验割裂的痛点。其核心原理是通过一个中央认证服务统一管理用户身份,其他应用通过标准协议(如OAuth 2.0)进行委托认证,从而实现“一次登录,处处访问”。OAuth 2.0授权码模式因其高安全性,成为Web服务器应用实现SSO的行业标准技术方案,它通过授权码在客户端后端与授权服务器间安全交换令牌,有效避免了令牌在前端暴露的风险。在机器学习平台和内部工具链场景中,该技术能统一TensorFlow等AI服务门户的访问入口,简化用户操作,并

weixin_30402343的博客 448

掌握RDMA核心:从同步构建到异步事件的连接艺术

本文深入解析RDMA编程中的双模式设计,揭示同步配置与异步事件机制的协作关系。第一部分阐述同步函数rdma_bind_addr和rdma_listen的本地化角色,强调它们仅完成本地端点配置。第二部分剖析异步事件模型,重点分析连接请求和建立事件的处理流程。通过完整生命周期序列图展示两种模式的交互过程,并提供错误处理、资源管理和性能调优的实用建议。文章指出,理解同步本地配置与异步网络响应这一责任划分,是掌握RDMA编程的关键所在。

数字人生 282

Spring Security OAuth 2.0授权服务器结合Redis实现获取accessToken速率限制

在生产环境中,我们通常颁发给OAuth2客户端有效期较长的token,但是授权服务无从知晓OAuth2客户端服务是否频繁获取token,便于我们主动控制token的颁发,减少数据库操作,本文我们将结合Redis实现滑动窗口算法限制速率解决此问题。

new_ord的博客 1948

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

怀旧版电脑GBC模拟器

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

一文带你了解 OAuth2 协议与 Spring Security OAuth2 集成!

OAuth 2.0 允许第三方应用程序访问受限的HTTP资源的授权协议,像平常大家使用Github、Google账号来登陆其他系统时使用的就是 OAuth 2.0 授权框架,下图就是使用Github账号登陆Coding系统的授权页面图: 类似使用 OAuth 2.0 授权的还有很多,本文将介绍 OAuth 2.0 相关的概念如:角色、授权类型等知识,以下是我整理一张 OAuth 2.0 授权的脑...

架构文摘 1133

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring Security / Servlet Application /42 OAuth 2.0 / OAuth 2.0 Client

样例代码:Spring Security Sample 参考:Spring Security Reference Spring Security 的 OAuth 2.0 Client 特性为 OAuth 2.0 鉴权框架 中定义的 Client 角色提供了支持 高层的核心特性有: Authorization Grant 支持 在 OAuth 2.0 中,Authorization Grant 表示授权码类型 授权码是一个用来换取 Access Token 的 code,它代表着资源所有者对三方系统的授权

菜鸟的博客 536

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring Security OAuth2授权服务器Token生成策略深度解析与实战

在构建现代分布式应用安全体系时,OAuth2协议是授权与认证的基石,而访问令牌(Access Token)则是其核心载体。其生成策略直接决定了系统的性能、安全性与扩展性。从原理上看,令牌的生成、存储与验证构成了授权服务器的关键链路,其中JWT(JSON Web Token)因其无状态、自包含的特性,已成为微服务架构下的主流技术选择。通过自定义TokenEnhancer,开发者可以向令牌中注入业务所需的用户ID、角色等自定义声明,实现灵活的身份信息传递。在工程实践中,结合TokenStore的选型(如JwtT

weixin_34268169的博客 781

Springsecurity普通登录认证和OAuth2产生token的认证流程

一、普通登录认证过程 1.用户发起登录请求,请求登录接口/login(springsecurity默认登录接口地址) 2.过滤器UsernamePasswordAuthenticationFilter验证当前请求是否是在请求登录接口/login,如果是调用attemptAuthentication方法开始认证 3.attemptAuthentication方法在请求中获取到username、password参数封装成一个Authentication对象,调用...

join_null的博客 6171

Spring Security oAuth2 令牌的访问与刷新

Spring Security oAuth2 令牌的访问与刷新 Access Token Access Token 是客户端访问资源服务器的令牌。拥有这个令牌代表着得到用户的授权。然而,这个授权应该是 临时 的,有一定有效期。这是因为,Access Token 在使用的过程中 可能会泄露。给 Access Token 限定一个 较短的有效期 可以降低因 Access Token 泄露而带来的风险。...

qq_44758028的博客 5755

Spring Security OAuth2授权码模式三大陷阱与实战避坑指南

OAuth2.0是现代Web应用身份认证与资源授权的核心协议,其授权码模式通过授权码作为中间凭证,实现了客户端与资源服务器间的安全间接授权,有效防止令牌泄露。这一机制在服务器端Web应用中尤为重要,它基于客户端密钥在后端安全通道交换访问令牌,确保了敏感数据的安全性。在工程实践中,Spring Security框架为OAuth2客户端提供了强大支持,但高度封装也带来了配置细节的隐藏风险。本文将聚焦于**重定向URI匹配**、**令牌存储获取**以及**资源服务器调用**这三个高频陷阱,结合**分布式会话**管

weixin_34353714的博客 377
上一篇: Maven打包Springboot docker报错
下一篇: Postman发送需要OAuth2登录认证的请求
Lee_01
博客等级 码龄9年 123粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值