java 授权码模式_Spring Security OAuth2 授权码模式的实现
写在前边
在文章OAuth 2.0 概念及授权流程梳理 中我们谈到OAuth 2.0的概念与流程,这里我准备分别记一记这几种授权模式的demo,一方面为自己的最近的学习做个总结,另一方面做下知识输出,如果文中有错误的地方,请评论指正,在此不胜感激
受众前提
阅读本文,默认读者已经过Spring Security有一定的了解,对OAuth2流程有一定了解
本文目标
带领读者对Spring Security OAuth2框架的授权码模式有一个比较直观的概念,能使用框架搭建授权码模式授权服务器与资源服务器(分离版本)
授权码模式流程回顾
授权码模式要求:用户登录并对第三方应用(客户端)进行授权,出示授权码交给客户端,客户端凭授权码换取access_token(访问凭证)
此模式要求授权服务器与用户直接交互,在此过程中,第三方应用是无法获取到用户输入的密码等信息的,这个模式也是OAuth 2.0中最安全的一个
Demo基本结构
这里主要关注authorization-code-authorization-server与authorization-code-resource-server这两个模块
authorization-code-client-resttemplate-jdbc这个项目是用来测试非OAuth2服务使用RestTemplate与JdbcTemplate对接OAuth2授权服务的,流程这里不讲,有兴趣可以debug看看,可能会让您对整个流程会有更清晰的感受
Maven依赖
org.springframework.boot
spring-boot-starter-security
org.springframework.boot
spring-boot-starter-web
org.springframework.security.oauth
spring-security-oauth2
${spring-security-oauth2.version}
搭建授权服务器(Authorization Server)
文中服务器均使用demo级别配置,请勿直接使用到生产环境
授权服务器结构主体如下:
启动类自不多说,先说下SecurityConfig
package com.github.hellxz.oauth2.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.Collections;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// @formatter: off
auth.inMemoryAuthentication()
.withUser("hellxz")
.password(passwordEncoder().encode("xyz"))
.authorities(Collections.emptyList());
// @formatter: on
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated() //所有请求都需要通过认证
.and()
.httpBasic() //Basic登录
.and()
.csrf().disable(); //关跨域保护
}
}
通过@Configuration 和@EnableWebSecurity开启Spring Security配置,继承WebSecurityConfigurerAdapter的方法,实现个性化配置,这里我们使用内存保存一个名为hellxz、密码为xyz的用户,与授权服务器交互的用户就是他了
除了配置用户,我们需要对服务的资源进行保护,这里将所有的请求都要求通过认证才可以访问,用户登录需要使用httpBasic形式(就是那种网页弹个窗要求登录的那种
java 授权码模式_Spring Security OAuth2 授权码模式的实现相关推荐
- OAuth2.0_授权服务配置_授权码模式_Spring Security OAuth2.0认证授权---springcloud工作笔记144
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 前面咱们已经配置好了授权服务器, 包括客户端信息, 包括申请令牌和授权码的接口配置 包括对接口安全 ...
- OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们再去看看密码模式和其他的模式来获取令牌. 我们要知道授权码模式是最安全的一种方式.对吧.验 ...
- Spring Security OAuth2.0_实现分布式认证授权_集成测试_Spring Security OAuth2.0认证授权---springcloud工作笔记155
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后前面我们已经把分布式微服务的,认证授权全部集成了,然后我们来测试. 启动资源微服务order微 ...
- OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 1.咱们先来搭建这个授权微服务,可以看到首先我们要写一个配置类叫做: AuthorizationS ...
- Spring Security Oauth2 授权码模式下 自定义登录、授权页面
主要说明:基于若依springcloud微服务框架的2.1版本 嫌弃缩进不舒服的,直接访问我的博客站点: http://binarydance.top//aticle_view.html?aticle ...
- Spring Security OAuth2 授权码模式 (Authorization Code)
前言 Spring Security OAuth2 授权码模式 (Authorization Code) 应该是授权登录的一个行业标准 整体流程 首先在平台注册获取CLIENT_ID和CLIENT_S ...
- 将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用
将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用 概述 在前文中介绍了OAuth2授权服务简单的实现密钥轮换,与其不同,本文将通过Consul实现我们的目的 ...
- 源码分析 - Spring Security OAuth2 生成 token 的执行流程
说明 本文内容全部基于 Spring Security OAuth2(2.3.5.RELEASE). OAuth2.0 有四种授权模式, 本文会以 密码模式 来举例讲解源码. 阅读前, 需要对 OAu ...
- 基于Session的认证方式_实现授权功能_Spring Security OAuth2.0认证授权---springcloud工作笔记118
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们来实现基本的,session的授权功能,很简单实际上就是利用了springmvc的拦截器.不多 ...
最新文章
- SAP UI5页面动画效果的实现,实际借用了jQuery的库文件
- kinux查日志_Linux查看日志常用命令
- 锁屏面试题百日百刷-网络篇(一)
- (c语言)编程输出二维数组中元素的最大值,要求用指针实现。
- Pandas 文本数据方法 extract( ) extractall( )
- java注解 @SuppressWarnings注解用法
- 通过wifi无法连接手机调试
- 找不到本地计算机策略组,Win10家庭版找不到本地组策略gpedit.msc解决办法
- npy/npz/pkl/csv长字符串存储
- iphone导出视频 无法连接到设备_爱思助手无法识别设备或者连接超时解决办法...
- Win7系统上的appdata是什么文件夹可以删除roaming
- vuex技术多组件共享数据-vuex模块化+namespace
- 解决新版本谷歌浏览器CROS跨域问题
- 如何下载没有水印的小咖秀和晃咖视频?教你个超级简单的方法
- Redis集群批量删除key
- 上汽董事长称不接受与华为合作自动驾驶;曝OPPO给离职员工补发年终奖,此前遭克扣;Google Play 将启用AAB格式应用...
- 李建忠设计模式之“组件协作”模式
- 快速批量修改文件名字
- 2021年武汉市中等职业学校学生技能大赛“网络空间安全”赛项技术规程
- django迁移数据库乱了,彻底重新再来的步骤
热门文章
- 计算机未连接到网络但是可以上网,win10系统能上网但图标显示未连接的解决办法...
- IMU传感器时什么?(二)陀螺仪的种类和原理
- gcms基峰有什么用_GC-MS与常规GC有什么不同,数据处理应该注意些什么?
- 高德地图根据经纬度调用api报错Uncaught Error: USERKEY_PLAT_NOMATCH(10009)
- ettercap进行简单的arp欺骗和中间人攻击
- 计算机趣事 英语作文,英语作文关于趣事
- CTF:PHP MD5函数0E绕过漏洞
- 2022年材料员-岗位技能(材料员)考试题库及模拟考试
- 学会计软件测试,会计专业毕业生1个月转行软件测试,她是怎么做到的?
- 每天十分钟学好ES6--关于解构赋值的彩虹屁