写在前边

在文章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 授权码模式的实现相关推荐

  1. OAuth2.0_授权服务配置_授权码模式_Spring Security OAuth2.0认证授权---springcloud工作笔记144

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 前面咱们已经配置好了授权服务器, 包括客户端信息, 包括申请令牌和授权码的接口配置 包括对接口安全 ...

  2. OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们再去看看密码模式和其他的模式来获取令牌. 我们要知道授权码模式是最安全的一种方式.对吧.验 ...

  3. Spring Security OAuth2.0_实现分布式认证授权_集成测试_Spring Security OAuth2.0认证授权---springcloud工作笔记155

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后前面我们已经把分布式微服务的,认证授权全部集成了,然后我们来测试. 启动资源微服务order微 ...

  4. OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 1.咱们先来搭建这个授权微服务,可以看到首先我们要写一个配置类叫做: AuthorizationS ...

  5. Spring Security Oauth2 授权码模式下 自定义登录、授权页面

    主要说明:基于若依springcloud微服务框架的2.1版本 嫌弃缩进不舒服的,直接访问我的博客站点: http://binarydance.top//aticle_view.html?aticle ...

  6. Spring Security OAuth2 授权码模式 (Authorization Code)

    前言 Spring Security OAuth2 授权码模式 (Authorization Code) 应该是授权登录的一个行业标准 整体流程 首先在平台注册获取CLIENT_ID和CLIENT_S ...

  7. 将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用

    将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用 概述 在前文中介绍了OAuth2授权服务简单的实现密钥轮换,与其不同,本文将通过Consul实现我们的目的 ...

  8. 源码分析 - Spring Security OAuth2 生成 token 的执行流程

    说明 本文内容全部基于 Spring Security OAuth2(2.3.5.RELEASE). OAuth2.0 有四种授权模式, 本文会以 密码模式 来举例讲解源码. 阅读前, 需要对 OAu ...

  9. 基于Session的认证方式_实现授权功能_Spring Security OAuth2.0认证授权---springcloud工作笔记118

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们来实现基本的,session的授权功能,很简单实际上就是利用了springmvc的拦截器.不多 ...

最新文章

  1. SAP UI5页面动画效果的实现,实际借用了jQuery的库文件
  2. kinux查日志_Linux查看日志常用命令
  3. 锁屏面试题百日百刷-网络篇(一)
  4. (c语言)编程输出二维数组中元素的最大值,要求用指针实现。
  5. Pandas 文本数据方法 extract( ) extractall( )
  6. java注解 @SuppressWarnings注解用法
  7. 通过wifi无法连接手机调试
  8. 找不到本地计算机策略组,Win10家庭版找不到本地组策略gpedit.msc解决办法
  9. npy/npz/pkl/csv长字符串存储
  10. iphone导出视频 无法连接到设备_爱思助手无法识别设备或者连接超时解决办法...
  11. Win7系统上的appdata是什么文件夹可以删除roaming
  12. vuex技术多组件共享数据-vuex模块化+namespace
  13. 解决新版本谷歌浏览器CROS跨域问题
  14. 如何下载没有水印的小咖秀和晃咖视频?教你个超级简单的方法
  15. Redis集群批量删除key
  16. 上汽董事长称不接受与华为合作自动驾驶;曝OPPO给离职员工补发年终奖,此前遭克扣;Google Play 将启用AAB格式应用...
  17. 李建忠设计模式之“组件协作”模式
  18. 快速批量修改文件名字
  19. 2021年武汉市中等职业学校学生技能大赛“网络空间安全”赛项技术规程
  20. django迁移数据库乱了,彻底重新再来的步骤

热门文章

  1. 计算机未连接到网络但是可以上网,win10系统能上网但图标显示未连接的解决办法...
  2. IMU传感器时什么?(二)陀螺仪的种类和原理
  3. gcms基峰有什么用_GC-MS与常规GC有什么不同,数据处理应该注意些什么?
  4. 高德地图根据经纬度调用api报错Uncaught Error: USERKEY_PLAT_NOMATCH(10009)
  5. ettercap进行简单的arp欺骗和中间人攻击
  6. 计算机趣事 英语作文,英语作文关于趣事
  7. CTF:PHP MD5函数0E绕过漏洞
  8. 2022年材料员-岗位技能(材料员)考试题库及模拟考试
  9. 学会计软件测试,会计专业毕业生1个月转行软件测试,她是怎么做到的?
  10. 每天十分钟学好ES6--关于解构赋值的彩虹屁