OAuth2.0
OAuth2.0
OAuth2.0是一种授权框架,用于授权第三方应用访问用户资源的方式。它允许用户将自己的信息(如照片、视频等)存储在一个服务提供商中,然后授权第三方应用访问这些信息,而无需提供用户名和密码给第三方应用。OAuth2.0通过向第三方应用提供访问令牌来实现这一目的,该访问令牌可以代表用户访问他们的资源。OAuth2.0还提供了与许多现有的授权和身份验证系统集成的机制,使第三方应用可以使用这些系统来验证用户身份。
OAuth2.0流程
OAuth 2.0是一种授权框架,用于通过第三方应用程序访问用户在另一个应用程序(如微信)上存储的受保护资源。
-
用户点击微信图标发送认证请求:用户在第三方应用程序(例如一个网站或应用)中点击微信图标,请求使用微信账户进行认证。
-
用户输入账户和密码:用户在弹出的微信登录页面中输入自己的微信账户和密码。
-
认证请求发送至微信服务器:第三方应用程序将用户输入的账户和密码等认证请求发送至微信服务器进行认证。
-
认证成功返回令牌:如果认证成功,微信服务器将返回一个令牌(access token)给第三方应用程序。
-
使用令牌获取用户信息:第三方应用程序可以使用令牌去微信服务器请求用户的头像、名字、性别等信息。
-
令牌验证:第三方应用程序将令牌再次发送至微信服务器进行验证,以确保令牌的有效性。
-
返回用户信息:如果令牌验证成功,微信服务器将返回用户的头像、名字、性别等信息给第三方应用程序。
-
与系统账户绑定:第三方应用程序可以将获取到的用户信息与其自己的系统账户进行绑定,以便后续的操作和个性化推荐等功能。
示例
步骤一:添加依赖 在你的pom.xml文件中添加以下依赖,以引入Spring Security和OAuth2的相关库:
<dependencies><!-- Spring Security --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- OAuth2 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency><!-- OAuth2 JWT --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-resource-server</artifactId></dependency>
</dependencies>
步骤二:配置Spring Security 在你的application.properties或application.yml文件中,添加以下配置:
spring.security.oauth2.client.registration.[client-id].client-id=[client-id]
spring.security.oauth2.client.registration.[client-id].client-secret=[client-secret]
spring.security.oauth2.client.registration.[client-id].authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.[client-id].redirect-uri=http://localhost:8080/login/oauth2/code/[client-id]
spring.security.oauth2.client.provider.[provider-name].authorization-uri=[authorization-uri]
spring.security.oauth2.client.provider.[provider-name].token-uri=[token-uri]
spring.security.oauth2.client.provider.[provider-name].user-info-uri=[user-info-uri]
spring.security.oauth2.client.provider.[provider-name].user-name-attribute=[user-name-attribute]
其中,[client-id]是你从提供商那里获得的客户端ID,[client-secret]是客户端密码,[provider-name]是提供商名称,[authorization-uri]是用于获取授权码的URI,[token-uri]是用于换取访问令牌的URI,[user-info-uri]是用于获取用户信息的URI,[user-name-attribute]是用户信息中的用户名属性。
步骤三:实现登录页面 创建一个登录页面,让用户以OAuth2提供商的身份登录,并授权访问你的应用程序。你可以使用Spring Security提供的默认登录页面,或者自定义一个登录页面。
步骤四:实现回调处理 在你的回调处理方法中,获取授权码和访问令牌,并将其存储在你的应用程序中。
@Controller
public class OAuth2LoginController {@Autowiredprivate OAuth2AuthorizedClientService authorizedClientService;@GetMapping("/login/oauth2/code/{client-id}")public String handleCallback(@RequestParam("code") String code,@RequestParam("state") String state,OAuth2AuthenticationToken authenticationToken) {OAuth2AuthorizedClient authorizedClient =((OAuth2AuthenticationToken) authentication).getAuthorizedClient();// 获取访问令牌String accessToken = authorizedClient.getAccessToken().getTokenValue();// 存储访问令牌// ...return "redirect:/";}
}
步骤五:保护资源 使用Spring Security来保护你的资源,确保只有授权的用户才能访问。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/").permitAll().antMatchers("/api/**").authenticated().and().oauth2Login();}
}
总结
OAuth2.0是一种授权框架,用于在不共享用户凭证的情况下,允许应用程序访问用户的资源。它提供了一种安全的、标准化的方式,允许用户授权第三方应用程序访问他们的资源,并且可以由用户随时撤销该访问权限。
OAuth2.0涉及以下几个主要角色:
-
资源拥有者(Resource Owner):用户拥有资源的所有者,可以授权第三方应用程序访问他们的资源。
-
客户端(Client):第三方应用程序,需要访问资源拥有者的资源。
-
授权服务器(Authorization Server):验证资源拥有者的身份,并颁发访问令牌给客户端。
-
资源服务器(Resource Server):存储和管理资源的服务器,可以根据访问令牌来控制资源的访问权限。
OAuth2.0的授权流程包括以下几个步骤:
-
客户端向授权服务器发送请求,请求授权访问某个资源。
-
授权服务器验证客户端的身份,并向客户端返回一个授权码。
-
客户端使用授权码向授权服务器请求访问令牌。
-
授权服务器验证授权码,并向客户端返回访问令牌。
-
客户端使用访问令牌向资源服务器请求访问资源。
-
资源服务器验证访问令牌,并向客户端返回资源。
OAuth2.0的主要优点是安全性和灵活性。它通过使用访问令牌来代替用户凭证,减少了第三方应用程序访问用户敏感信息的风险。同时,OAuth2.0还支持多种授权流程和多种身份验证方式,可以适应不同的应用场景和安全需求。
然而,OAuth2.0也存在一些安全风险,例如令牌劫持和跨站请求伪造(CSRF)攻击。为了减少这些风险,开发者需要采取一些额外的安全措施,如使用HTTPS协议传输令牌和实施严格的访问令牌验证机制。
相关文章:
OAuth2.0
OAuth2.0 OAuth2.0是一种授权框架,用于授权第三方应用访问用户资源的方式。它允许用户将自己的信息(如照片、视频等)存储在一个服务提供商中,然后授权第三方应用访问这些信息,而无需提供用户名和密码给第三方应用。OAu…...
测试testing10
测试testing10...
在Java中实现泛型(Generics)的深入解析
在Java中,泛型(Generics)是一个强大的工具,它允许我们在编译时定义类型参数,使代码更加灵活、可重用和类型安全。下面,我将从技术难点、面试官关注点、回答吸引力以及代码举例四个方面,详细解析…...
每周题解:繁忙的都市
题目链接 繁忙的都市 题目描述 城市 C 是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市 C 的道路是这样分布的:城市中有 n n n 个交叉路口,有些交叉路口之间有道路相连,两…...
linux之防火墙工具
netfilter Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中。 Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户…...
【Python】—— 高阶函数
目录 (一)体验高阶函数 (二)内置高阶函数 2.1 map() 2.2 reduce() 2.3 filter() Python中的高阶函数是指那些接受函数作为参数,或者返回函数作为结果的函数。这种特性让Python的函数编程能力非常强大&…...
逻辑分析仪 - 采样率/采样深度
采样深度(Sampling Depth) 采样深度指的是逻辑分析仪在一次捕获过程中可以记录的最大样本数量。简单来说,采样深度越大,逻辑分析仪可以记录的数据量就越多。这对于分析长时间的信号变化或复杂的信号序列非常重要。 采样率&#…...
【Maven打包将resources/lib/下的jar也打包进jar包中】
Maven打包将resources/lib/下的jar也打包进jar包中 !!!少走弯路 第一步 resources/lib/下引入jar ftp4j-1.7.2.jar替换为自己jar包的名称 <dependency><groupId>it.sauronsoftware.ftp4j</groupId><artifactId>ft…...
基于Java的地震震中附近城市分析实战
目录 前言 一、空间数据说明 1、空间查询 二、Java后台开发 1、模型层设计与实现 2、控制层设计与实现 三、Leaflet地图开发 1、地震震中位置展示 2、附近城市展示 3、成果展示 总结 前言 随着全球气候变化和地壳活动的不断演变,地震作为一种自然灾害&…...
【C语言】指针(三)
目录 一、字符指针 1.1 ❥ 使用场景 1.2 ❥ 有关字符串笔试题 二、数组指针 2.1 ❥ 数组指针变量 2.2 ❥ 数组指针类型 2.3 ❥ 数组指针的初始化 三、数组指针的使用 3.1 ❥ 二维数组和数组名的理解 3.2 ❥ 二维数组传参 四、函数指针 4.1 ❥ 函数的地址 4.2 ❥ 函数…...
【Linux】从零开始认识进程间通信 —— 管道
送给大家一句话: 人要成长,必有原因,背后的努力与积累一定数倍于普通人。所以,关键还在于自己。 – 杨绛 从零开始认识进程间通信 1 为什么要进程间通信2 进程如何通信3 进程通信的常见方式4 管道4.1 什么是管道4.2 管道通信的系…...
Top3专业课150满分,怎么考的?
这个系列会邀请上岸学长学姐进行经验分享~ 今天经验分享的同学是小马哥上海交大819的全程班学员,专业课150分满分,这位同学也是819期末考试的第一名,非常厉害!大家吸吸欧气! 初试成绩单 前言 先介绍下自己࿰…...
Windows Presentation Foundation(WPF)要点总结
Windows Presentation Foundation(WPF)是微软推出的一种用于构建Windows桌面应用程序的框架。自从WPF在.NET Framework 3.0中引入以来,它以其强大的功能和灵活性,逐渐成为开发人员构建现代、富用户界面应用程序的首选。本文将概述…...
【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法
文章目录 前言 Timer中断调度 Event中断调度 StateFlow调度 分析和应用 总结 参考资料 前言 近期在一些嵌入式系统开发项目中,在使用嵌入式处理器时,遇到了挺多费时费力的事情。所以利用晚上和周末时间,在这些方面深入研究了一下&…...
揭秘Python的魔法:装饰器的超能力大揭秘 ♂️✨
文章目录 Python进阶之装饰器详解1. 引言装饰器的概念与意义装饰器在Python编程中的作用 2. 背景介绍2.1 函数作为对象2.2 高阶函数 3. 装饰器基础3.1 理解装饰器3.2 装饰器的工作原理 4. 带参数的装饰器4.1 为什么需要带参数4.2 实现带参数的装饰器使用函数包裹装饰器使用类实…...
怎么一键消除路人?教你三个消除方法
怎么一键消除路人?在数字时代,摄影已成为我们记录生活、表达情感的重要方式。然而,完美的照片背后往往隐藏着一些不那么完美的元素——比如那些不经意间闯入镜头的路人。他们或许只是匆匆过客,但却足以破坏你精心构图的美好瞬间。…...
Android Settings系统属性读写
Settings系统属性存储均为xml,分三种: 1.global:所有的偏好设置对系统的所有用户公开,第三方APP有读没有写的权限; 源码地址:frameworks/base/core/java/android/provider/Settings.java 对应xml路径&…...
2024年,企业的人才管理怎么做?这5点是关键!
当今时代,各行各业都面临着激烈的竞争。这些竞争归根结底都是人才的竞争。企业若想在竞争中掌握主动权,实现基业长青,就必须努力留住人才,并充分发挥他们的积极性、主动性和创造性。因此,做好人才管理是企业实现长期可…...
数据库DDL语句
数据库DDL语句: 查询所有数据库: show databases;查询当前数据库的名称 select database();创建数据库 create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则]注意:排序规则指定后,它会影响…...
《艺术大观》知网艺术刊:可加急, 出刊上网快
《艺术大观》 《艺术大观》征文通知 《艺术大观》期刊诚邀学者、艺术家和文化工作者积极投稿,共同探索艺术领域的前沿问题,促进学术交流和艺术创作的发展。我们欢迎各类艺术形式的研究与评论,包括但不限于绘画、雕塑、音乐、舞蹈、戏剧、电…...
Keyv自定义序列化教程:超越JSON,支持更多数据类型
Keyv自定义序列化教程:超越JSON,支持更多数据类型 【免费下载链接】keyv jaredwray/keyv: 这是一个分布式键值存储库,用于在多个节点上存储数据。适合用于需要分布式存储和访问的场景。特点:易于使用,支持多种数据存储…...
IDK slgA:无创检测,便捷采样
在人体的防御体系中,免疫系统扮演着至关重要的角色。而其中,黏膜免疫系统则是抵御外界病原体的第一道防线。在众多免疫成分中,分泌型免疫球蛋白A(Secretory Immunoglobulin A, 简称sIgA)以其独特的功能和广泛的存在形式…...
Mermaid Live Editor:5分钟快速创建专业图表的终极免费工具
Mermaid Live Editor:5分钟快速创建专业图表的终极免费工具 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-e…...
ConvNeXt 改进 :ConvNeXt添加可变形卷积(DCNv2,CVPR 2018),实现高效涨点,二次创新CNBlock结构 ,独家首发
本文教的是方法,也给出几种改进方法,二次创新结构,百变不离其宗,一文带你改进自己模型,科研路上少走弯路。 前言 DCNv2对原始的DCNv1进行了改进,可变形卷积网络的卓越性能源于其适应对象几何变化的能力。通过对其自适应行为的检查,虽然对其神经特征的空间支持比常规的Co…...
视频PPT提取终极指南:3步从视频中智能提取演示文稿
视频PPT提取终极指南:3步从视频中智能提取演示文稿 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾经需要从视频中提取PPT内容,却苦于手动截图效率低…...
Python与OpenCV实战:图像对比度与亮度调整的算法解析与优化
1. 图像处理中的对比度与亮度基础 当你用手机拍完照片觉得太暗或者颜色不够鲜艳时,通常会下意识地滑动"亮度"和"对比度"调节条。这背后的数学原理,其实就是我们要探讨的核心算法。在OpenCV中,调整图像对比度和亮度的基础…...
Alpine Linux在WSL中的生产力配置:zsh美化+Rust环境搭建
Alpine Linux在WSL中的生产力配置:zsh美化Rust环境搭建 在Windows Subsystem for Linux (WSL)生态中,Alpine Linux以其轻量级和安全性逐渐成为开发者的新宠。本文将带你打造一个兼具美观与高效的Alpine开发环境,特别适合追求极简主义又不愿牺…...
FPGA开发必备:手把手教你安装破解Modelsim 10.5se(附环境变量配置避坑指南)
FPGA开发实战:Modelsim仿真环境搭建与高效调试技巧 对于FPGA开发者而言,一个稳定可靠的仿真环境就像厨师的刀具一样重要。Modelsim作为业界广泛使用的仿真工具,其精确的时序仿真能力可以帮助我们在硬件烧录前发现绝大多数逻辑错误。本文将从一…...
VideoSrt:智能字幕生成工具重新定义视频创作效率
VideoSrt:智能字幕生成工具重新定义视频创作效率 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows VideoSrt是一款基于Golan…...
当AI学会“越狱“与“签名“:大模型 安全的攻与防
当AI学会"越狱"与"签名":大模型安全的攻与防引言2023年以来,以ChatGPT、GPT-4、LLaMA、Qwen为代表的大语言模型(Large Language Models, LLMs)席卷了几乎所有行业。然而,能力越大,风险…...
