spring-security-oauth

Spring Boot 2.3 新特配置文件属性跟踪

戏子无情 提交于 2020-08-15 23:05:02
背景 当我们使用 spring boot 在多环境打包,配置属性在不同环境的值不同,如下: spring: profiles: active: @project.profile@ #根据maven 动态配置profile --- spring: profiles: dev demo: lengleng_dev --- spring: profiles: prd demo: lengleng_prd 或者使用 spring cloud 配置中心 (nacos/config)等 再有就是 应用配置的同一个属性,值的来源可能来自 配置文件、环境变量、启动参数 等等。 很多情况由于 如上配置的复杂性,应用在读取配置的时候,并不是我们预期的值 ,比如我们想使用是配置文件 dev 环境的值,却被环境变量的 或者其他的数据覆盖等,这些往往只有等我们运行时,输出日志才能发现错误原因。 解决方案 spring boot 2.3 Actuator 提供 /actuator/configprops 端点 (之前版本也有此端点,但是行为发生变化了 /actuator/env 保持一致 ),提供对配置文件属性跟踪功能, 方便我们在 spring boot 应用中,实时的获取配置文件实际加载值 。 如何使用 引入 actuator 依赖 <dependency> <groupId>org

OAuth2 Token 一定要放在请求头中吗?

萝らか妹 提交于 2020-08-15 12:29:06
Token 一定要放在请求头中吗? 答案肯定是否定的,本文将从源码的角度来分享一下 spring security oauth2 的解析过程,及其扩展点的应用场景。 Token 解析过程说明 当我们使用 spring security oauth2 时, 一般情况下需要把认证中心申请的 token 放在请求头中请求目标接口,如下图 ① spring security oauth2 通过拦截器获取此 token 完成令牌到当前用户信息(UserDetails)的转换。 OAuth2AuthenticationProcessingFilter.doFilter public class OAuth2AuthenticationProcessingFilter{ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { try { // 1. 根据用户请求解析令牌,组装预登陆对象 Authentication authentication = tokenExtractor.extract(request); if (authentication == null) { // 若是预登陆状态为空,把无状态登录清空

Spring Security Oauth2 oauth2 4种模式

谁说胖子不能爱 提交于 2020-08-14 09:29:59
oauth2根据使用场景不同,分成了4种模式 授权码模式(authorization code) 简化模式(implicit) 密码模式(resource owner password credentials) 客户端模式(client credentials) 授权许可是表示客户用来获取访问令牌的资源所有者授权的凭证。此规范协议规定了4种授权类型: authorization code(授权码模式) implicit(简化模式) resource owner password credentials(密码模式) client credentials(客户端模式) 授权码模式 流程图 授权码模式流程说明 用户访问客户端,客户端通过用户代理向认证服务器请求授权码; 用户同意授权; 认证服务器通过用户代理返回授权码给客户端; 客户端携带授权码向认证服务器请求访问令牌(AccessToken); 认证服务器返回访问令牌; 客户端携带访问令牌向资源服务器请求资源; 资源服务器返回资源。 简化模式 流程图 简化模式流程说明 用户访问客户端,客户端通过用户代理向认证服务器请求授权码; 用户同意授权; 认证服务器返回一个重定向地址,该地址的url的Hash部分包含了令牌; 用户代理向资源服务器发送请求,其中不带令牌信息; 资源服务器返回一个网页,其中包含的脚本可以获取Hash中的令牌;

springSecurity+oauth2实现权限认证系统(资源服务器与授权服务器分离,client信息入库,token存入redis持久化)

百般思念 提交于 2020-08-13 13:01:21
文章目录 一、前言 二、oAuth2授权码模式认证流程 三、权限认证系统的三个角色 四、demo实现的功能 五、技术点 1.SpringSecurity自定义登录页面,账密信息入库 配置自定义登录页面 账密信息入库 2.集成通用Mapper 六、认证服务器 1.配置client信息入库存储 2.配置access_token等令牌信息持久化到redis中 3.授权服务器提供的一些访问接口 七、资源服务器 1.受保护资源有关配置 2.资源服务器与授权服务器分离配置 八、客户端 1.访问授权服务器获取令牌 2.使用access_token来访问资源服务器 3.实现客户端访问指定接口完成资源服务器登录 九、完整流程演示 1.客户端登录: 2.跳转授权认证页面 3.完成授权认证 4.访问受保护资源 5.客户端访问指定接口完成资源服务器登录 十、项目地址 一、前言 本文章侧重实战,是为线上系统做的一个demo。适合对oauth2有一定理解后再阅读。 如果对oauth2理解还不够深入,建议先阅读 芋道 Spring Security Oauth2入门 来夯实一下基础。 这个demo主要实现了资源服务器与授权服务器分离,client信息入库,token信息在redis中持久化,demo的github地址会在文末贴出。 二、oAuth2授权码模式认证流程 首先来看授权码认证模式的一个流程图:

Spring Boot 2.3 新特配置文件属性跟踪

大城市里の小女人 提交于 2020-08-13 11:13:43
背景 当我们使用 spring boot 在多环境打包,配置属性在不同环境的值不同,如下: spring: profiles: active: @project.profile@ #根据maven 动态配置profile --- spring: profiles: dev demo: lengleng_dev --- spring: profiles: prd demo: lengleng_prd 或者使用 spring cloud 配置中心 (nacos/config)等 再有就是 应用配置的同一个属性,值的来源可能来自 配置文件、环境变量、启动参数 等等。 很多情况由于 如上配置的复杂性,应用在读取配置的时候,并不是我们预期的值 ,比如我们想使用是配置文件 dev 环境的值,却被环境变量的 或者其他的数据覆盖等,这些往往只有等我们运行时,输出日志才能发现错误原因。 解决方案 spring boot 2.3 Actuator 提供 /actuator/configprops 端点 (之前版本也有此端点,但是行为发生变化了 /actuator/env 保持一致 ),提供对配置文件属性跟踪功能, 方便我们在 spring boot 应用中,实时的获取配置文件实际加载值 。 如何使用 引入 actuator 依赖 <dependency> <groupId>org

SpringBoot 整合 oauth2实现 token 认证

ぐ巨炮叔叔 提交于 2020-08-12 06:38:57
参考地址: https://www.jianshu.com/p/19059060036b session和token的区别: session是空间换时间,而token是时间换空间。session占用空间,但是可以管理过期时间,token管理部了过期时间,但是不占用空间. sessionId失效问题和token内包含。 session基于cookie,app请求并没有cookie 。 token更加安全(每次请求都需要带上) Oauth2 密码授权流程 在oauth2协议里,每一个应用都有自己的一个clientId和clientSecret(需要去认证方申请),所以一旦想通过认证,必须要有认证方下发的clientId和secret。 1. pom <!--security--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> </dependency> 2.

Spring Security OAuth2

笑着哭i 提交于 2020-08-05 04:36:15
登录实现 拿浏览器网页登录举例: 基于 OAuth2.0-密码模式 实现网页登录的本质就是浏览器通过 /oauth/token 接口将 用户名 和 密码 等信息传给后台, 然后后台验证通过后返回一个有效的 token 给浏览器. 通过 curl 命令发送请求 请求头 Authorization 存放的是 clientId 和 secret 经过 Base64 编码后的结果 请求参数包括用户名( username )、密码( password )、授权模式( grant_type ). curl --location --request POST 'http://localhost:8101/oauth/token?username=zhangsan&password=123456&grant_type=password \ --header 'Authorization: Basic bmltbzE6MTIzNDU2' 响应内容 { "scope": "[all, read, write]", "code": 0, "access_token": "7e1d19dd-5cef-4993-a1c3-c35aa53d9b29", "token_type": "bearer", "refresh_token": "992518eb-4357-4283-8673-a9ca96ad2a9e"

深入理解JWT的使用场景和优劣

你说的曾经没有我的故事 提交于 2020-04-30 21:04:40
前面简单介绍了JWT的基础只是和简单的小Demo,但是对于JWT的应用场景和优缺点掌握的还够,这些东西只有自己实践过才能搞清楚其中的细节。在网上看到一个大佬对这块讲的比较好,就转载过来一起学习下。 原文链接 这样形如 A.B.C 的字符串时能敏感地认出这是使用了 jwt。发了这两篇文章后,有不少读者在文末留言,表达了对 jwt 使用方式的一些疑惑,以及到底哪些场景适合使用 jwt。我并不是 jwt 方面的专家,和不少读者一样,起初研究时我也存在相同疑惑,甚至在逐渐接触后产生了更大的疑惑,经过这段时间项目中的使用和一些自己思考,把个人的总结整理成此文。 这些基础知识简单地介绍下,千万别搞混了三个概念。在 jwt 中恰好同时涉及了这三个概念,笔者用大白话来做下通俗的讲解(非严谨定义,供个人理解) 编码(encode)和解码(decode) 一般是编码解码是为了方便以字节的方式表示数据,便于存储和网络传输。整个 jwt 串会被置于 http 的 Header 或者 url 中,为了不出现乱码解析错误等意外,编码是有必要的。在 jwt 中以 . 分割的三个部分都经过 base64 编码(secret 部分是否进行 base64 编码是可选的,header 和 payload 则是必须进行 base64 编码)。注意,编码的一个特点:编码和解码的整个过程是可逆的。得知编码方式后,整个 jwt

Spring boot --- Spring Oauth(一)

妖精的绣舞 提交于 2020-04-30 02:30:47
文章部分图片来自参考资料,这篇文章主要讲 spring security oauth 概述 上一篇我们学习了 SS 中重要的工作原理和几个大概的认证和授权过程。而 spring security oauth 用到的就是 spring security 知识,我们学习 sso 之前先看一下oauth 是什么,可以学习 阮一峰老师的文章 oauth 的流程图如下 : (牢牢记住这张图) 主要的角色有资源持有者,资源服务器,认证服务器,还有用户 授权(获取 Access Token)的方式有多种方式 授权码 简化模式 客户端模式 密码模式 oauth 可以理解成工作中,你(Client)去出差,回来需要报销,会计(Authorzation Server)首先需要你请示老板(Resource Owned)是否同意给你报销出差费用,假如同意了,你就回来找会计,把老板的凭证给她,她会给你一个token (获取token过程的方式有多种,就是前面提到的), 然后你带着 token 再去财务(Resource Server)领钱 ,结束流程。 Spring Security Oauth 学习 Spring Security Oauth ,先学习一个例子( 出处 ),然后根据例子配合oauth 流程学习 我们按照上面的例子敲完代码后,整个流程走完再结合oauth 授权的流程 例子中使用的授权码

Spring Security Web 和 OAuth2

混江龙づ霸主 提交于 2020-04-30 02:30:28
前言 Spring Security Core Spring Security Web 过滤器链的构建 过滤器链的调用 过滤器链的使用 Spring Security OAuth2 授权服务器 授权码模式 密码模式 客户端认证 TokenGranter 资源服务器 Spring Security JWT 结语 参考链接 前言<a id="sec-1"></a> Spring Security 是一个多模块的项目,之前梳理了一下 Spring Security 认证流程 ,现在才发现,梳理的那部分内容更多的只是 Spring Security Core 这个核心模块中的内容。 日常使用时,还会更多的涉及 Spring Security Web 和 Spring Security OAuth2 中的东西,这篇博客的主要内容便是梳理一下这三者之间的关系,了解一下各自发挥的作用。 Spring Security Core<a id="sec-2"></a> Spring Security Core 在整个 Spring Security 框架中扮演着重要的角色,提供了有关于认证和权限控制相关的抽象。 然而,在使用的过程中,我们接触的更多的可能是和认证相关的抽象,比如: 通过 AuthenticationManager 提供了进行用户认证方法的抽象,允许通过 ProviderManager