OAuth 2.0 入门指南:掌握授权码模式

一、授权码模式

   (1)spring-security-oauth2 从2.4.x版本开始,@EnableAuthorizationServer注解就弃用过时了 

   (2)当前演示Demo版本:springboot的1.5.x版本与spring-security-oauth2的2.3.8.RELEASE整合,如果使用springboot 2.x.x版本是不兼容的,程序会报错。

   (3)spring-security-oauth2 的2.3.8.RELEASE之后的版本与springboot 2.x.x的版本整合写法待学习。

二、所有关键代码参见👇

1、用户实体类 UserInfo

/*** 用户信息实体* @Author fenglm*/
@Data
public class UserInfo {private String name;private String email;
}

2、获取用户信息 UserController

/*** 用户信息Controller* @Author fenglm*/
@Controller
public class UserController {/*** 获取用户信息(资源API)* @return*/@RequestMapping("/api/userinfo")public ResponseEntity<UserInfo> getUserInfo() {User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();String email = user.getUsername()+"@fenglm.com";UserInfo userInfo = new UserInfo();userInfo.setName(user.getUsername());userInfo.setEmail(email);return ResponseEntity.ok(userInfo);}
}

3、授权服务器配置OAuth2AuthorizationServer

/*** 授权服务器配置* 说明:* (1)org.springframework.security.oauth从2.4.x版本开始,@EnableAuthorizationServer等注解就弃用过时了,当前Demo使用的是2.3.8.RELEASE版本* (2)springboot版本:1.5.x 与 security.oauth版本:2.3.8.RELEASE 相对应整合,使用springboot 2.x.x版本是不兼容的* (3)2.3.8.RELEASE之后的版本、springboot 2.x.x的版本整合写法待学习*/
@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServer extends AuthorizationServerConfigurerAdapter {@Overridepublic void configure(ClientDetailsServiceConfigurer clientDetailsServiceConfigurer) throws Exception {clientDetailsServiceConfigurer.inMemory().withClient("clientapp").secret("112233")//重定向地址.redirectUris("http://localhost:9001/callback")//授权类型.authorizedGrantTypes("authorization_code")//权限范围.scopes("read_userinfo", "read_contacts");}
}

4、资源服务器配置OAuth2ResourceServer

/*** 资源服务器配置*/
@Configuration
@EnableResourceServer
public class OAuth2ResourceServer extends ResourceServerConfigurerAdapter {@Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().requestMatchers().antMatchers("/api/**");}
}

5、配置文件application.properties

# Spring Security Setting
security.user.name=fenglm
security.user.password=sy123

6、pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.fenglm.server</groupId><artifactId>authcode-server</artifactId><version>1.0.0-SNAPSHOT</version><name>authcode-server</name><description>基于授权码模式+Spring Security OAuth2的最简授权服务器</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.springframework.security.oauth/spring-security-oauth2 --><dependency><groupId>org.springframework.security.oauth</groupId><artifactId>spring-security-oauth2</artifactId><version>2.3.8.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-test --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId><version>5.6.2</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

三、演示流程

第1步:获取授权码

      注:链接地址里的client_id注意需要跟后台代码里写的一致 点击获取授权码-浏览器请求(注:state参数暂忽略)icon-default.png?t=N7T8https://link.zhihu.com/?target=http%3A//localhost%3A8080/oauth/authorize%3Fclient_id%3Dclientapp%26redirect_uri%3Dhttp%3A//localhost%3A9001/callback%26response_type%3Dcode%26scope%3Dread_userinfo

 获取授权码-浏览器响应:http://localhost:9001/callback?code=8uYpdo

第2步:获取访问令牌

(1)获取访问令牌-请求示例(postman)
curl -X POST --user clientapp:112233 http://localhost:8080/oauth/token -H
"content-type: application/x-www-form-urlencoded" -d
"code=8uYpdo&grant_type=authorization_code&redirect_uri=http%3A%2F%2Flocalh
ost%3A9001%2Fcallback&scope=read_userinfo"
(2)获取访问令牌-响应示例(postman)
{"access_token": "36cded80-b6f5-43b7-bdfc-594788a24530","token_type": "bearer","expires_in": 43199,"scope": "read_userinfo"
}

第3步:调用API获取用户资源

(1)调用API-请求示例(postman)
curl -X GET http://localhost:8080/api/userinfo -H "authorization: Bearer 36cded80-b6f5-43b7-bdfc-594788a24530"
(2)调用API-响应示例(postman)
{"name": "fenglm","email": "fenglm@fenglm.com"
}

 想要了解更多实用小干货

可关注我的【知乎】 

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

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

相关文章

CASA认证记录

前一阵我们的应用在申请Google Fit API时&#xff0c;被要求进行安全性评估。 收到的通知邮件部分内容如下: You are required to complete a TIER 2 CASA security assessment for your application by the following date: xxx. This assessment is required annually; to le…

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力 代码CrissCrossAttention注意力ECAAttention通道注意力EMAU期望最大化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset资源清单文件编写技巧2.1、查看定义Statefulset资源需要的字段2.2、查看statefulset.spec字段如何定义2.3、查看statefulset的spec.template字段如何定义 三、Statefulset使用案例&#xff1a;部署web站点3.1、编写一个Statefulset资…

LeetCode——1954. 收集足够苹果的最小花园周长

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff1a;这个题目比较复杂&#xff0c;就是给你一个坐标轴&#xff0c;然后让你以0,0为中心选择一个边长为整数的正方形&#xff0c;使得正方形中所有点坐标的绝对值之和要大于给定的neededApples。但是我们需要输出的是…

OpenHarmony之内核层解析~

OpenHarmony简介 技术架构 OpenHarmony整体遵从分层设计&#xff0c;从下向上依次为&#xff1a;内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开&#xff0c;在多设备部署场景下&#xff0c;支持根据实际需求裁剪某些非必要的组件…

C++ 比 C语言增加的新特性 2

1.C新增了带默认值参数的函数 1.1 格式 格式&#xff1a;返回值 函数名&#xff08;参数1初始值1&#xff0c;..........&#xff09;{} 例如&#xff1a;void function&#xff08;int a10&#xff09;{} 调用&#xff1a;不需要更改参数的值&#xff1a;function&#x…

AI日报:2024年人工智能对各行业初创企业的影响

欢迎订阅专栏 《AI日报》 获取人工智能邻域最新资讯 文章目录 2024年人工智能对初创企业的影响具体行业医疗金融服务运输与物流等 新趋势 2024年人工智能对初创企业的影响 2023年见证了人工智能在各个行业的快速采用和创新。随着我们步入2024年&#xff0c;人工智能初创公司正…

双向可控硅触发电路图大全

双向可控硅触发电路图一&#xff1a; 为了提高效率&#xff0c;使触发脉冲与交流电压同步&#xff0c;要求每隔半个交流电的周期输出一个触发脉冲&#xff0c;且触发脉冲电压应大于4V&#xff0c;脉冲宽度应大于20us.图中BT为变压器&#xff0c;TPL521-2为光电耦合器&#xff…

2023RT-Thread开发者大会

参加了一次RT-Thread的开发者大会&#xff0c;相当有意思&#xff0c;虽然一天奔波挺累&#xff0c;但睡了半天之后简单剪了下22号的视频&#xff0c;也就有时间写自己的参会笔记了。 与openEuler社区不同&#xff0c;RT-Thread社区更专注于嵌入式&#xff0c;与硬件厂商结合较…

WorkPlus一站式协同解决方案,助力企业降本增效

在企业数字化转型的过程中&#xff0c;很多企业都会遇到一个共同问题&#xff1a;重复建设基础功能&#xff0c;耗费大量时间和资源。为解决这一难题&#xff0c;WorkPlus已经将一些通用、基础且有技术门槛的功能进行了集成与开发&#xff0c;如IM&#xff08;即时通讯&#xf…

渗透测试——1.1初认识kali

一、kali的下载 官方地址&#xff1a;www.kali.org 下载后压缩就可用vmware打开即可&#xff08;初始账号和密码都是kali&#xff09; 二、三种网络配置 1、桥接模式&#xff1a;将虚拟机看成局域网中的独立主机 2、NAT模式&#xff1a;将物理机当做路由器&#xff08;rout…

操作无法完成(错误 0x000006ba),Windows 11 PDF打印机无法使用解决办法

操作无法完成(错误 0x000006ba)&#xff0c;Windows 11 PDF打印机无法使用解决办法 解决方式一 先重启一次电脑&#xff0c;看看是否可以解决问题。 解决方式二 重新启动 Printer Spooler 服务