spring-security-oauth

你知道你对 JSON Web Token 的认识存在误解吗

本秂侑毒 提交于 2019-12-05 20:00:54
1.前言 JSON Web Token (JWT) 其实目前已经广为软件开发者所熟知了,但是 JOSE (Javascript Object Signing and Encryption) 却鲜有人知道,我第一次知道它是在 Spring Security 的官方文档中,它改变了我对 JWT 的一些认识。目前国内能找到相关中文资料不是太多。所以我觉得有必要归纳一下。 2. JOSE 概述 JOSE 是一种旨在提供在各方之间安全传递声明(claims)的方法的规范集。我们常用的 JWT 就包含了允许客户端访问特定应用下特定资源的声明。 JOSE 制定了一系列的规范来达到此目的。目前该规范还在不断的发展,我们常用的包含以下几个 RFC : JWS(RFC 7515) -JSON Web签名,描述生成和处理签名消息 JWE(RFC 7516) -JSON Web加密,描述了保护和处理加密 消息 JWK(RFC 7517) -JSON Web密钥,描述 Javascript 对象签名和加密中加密密钥的 格式和处理 JWA(RFC 7518) -JSON Web算法,描述了 Javascript 对象签名和加密中使用的 加密 算法 JWT(RFC 7519) -JSON Web令牌,描述以 JSON 编码并由 JWS 或 JWE 保护的声明的表示形式 3. 我们都看错了 JWT 看了对 JWT

你知道你对 JSON Web Token 的认识存在误解吗

ぃ、小莉子 提交于 2019-12-05 19:53:50
1.前言 JSON Web Token (JWT) 其实目前已经广为软件开发者所熟知了,但是 JOSE (Javascript Object Signing and Encryption) 却鲜有人知道,我第一次知道它是在 Spring Security 的官方文档中,它改变了我对 JWT 的一些认识。目前国内能找到相关中文资料不是太多。所以我觉得有必要归纳一下。 2. JOSE 概述 JOSE 是一种旨在提供在各方之间安全传递声明(claims)的方法的规范集。我们常用的 JWT 就包含了允许客户端访问特定应用下特定资源的声明。 JOSE 制定了一系列的规范来达到此目的。目前该规范还在不断的发展,我们常用的包含以下几个 RFC : JWS(RFC 7515) -JSON Web签名,描述生成和处理签名消息 JWE(RFC 7516) -JSON Web加密,描述了保护和处理加密 消息 JWK(RFC 7517) -JSON Web密钥,描述 Javascript 对象签名和加密中加密密钥的 格式和处理 JWA(RFC 7518) -JSON Web算法,描述了 Javascript 对象签名和加密中使用的 加密 算法 JWT(RFC 7519) -JSON Web令牌,描述以 JSON 编码并由 JWS 或 JWE 保护的声明的表示形式 3. 我们都看错了 JWT 看了对 JWT

不推荐使用Spring Boot 2.2.0 ,这个问题你肯定会遇到 (二)

微笑、不失礼 提交于 2019-12-04 05:31:52
> 项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注 最新版本实践 > 上篇文章讲到 Spring Boot 2.2.0 和 MyBatis 兼容问题 ,今天再来看一下 这个 boom change ConfigurationProperties 注解使用 如上图,当配置文件中存在相同组的属性, 用户名 、 密码 、 年龄 都属于用户属性的抽象,按面向的规则我们可以抽取出一个 User 的 PO 类型使用 @ConfigurationProperties 将外部配置绑定到代码中的bean。同时可以像其他任何Spring bean一样在整个应用程序代码中注入和使用此bean。 application.properties user.username=lengleng user.password=123456 user.age=26 User POJO /** * @author lengleng * @date 2019-11-08 * <p> * 2.2 之前版本,必须使用 @Component 或者 @Configuration 声明成Spring Bean */ @Component @ConfigurationProperties(prefix = "user") public class User {

Spring Security 官方文档学习路径

为君一笑 提交于 2019-12-01 13:44:58
Spring 目前有三个层次的项目,Spring Framework层,Spring Boot层和Spring Cloud层。这三个层次的项目里都有Spring Security的东西,在加上安全和权限控制这块是大多数人的一个弱项,导致官方文档给人乱乱的感觉;下面我们就梳理一下官方文档的学习顺序; 首先是(1)Spring Security Reference的文档,Spring Security的设计理念,架构实现,与其他组件的整合等的描述都在这个文档; 接着就是(2)Spring-Security-OAuth,这是Spring Security的oauth协议的扩展,当然在此之前要先搞懂oauth协议。这里面包含了多个文档和引用,关于Spring Security的部分是,Spring-Security-OAuth-Tutorial和OAuth Developers Guide; 接着就是第二个层次的(3)Spring Boot Reference Guide里的Spring Security的部分,这一部分主要描述了Spring Boot对Spring Security和Spring Security OAuth2的封装; 最后是第三层Spring Cloud的(4)Spring Cloud Security,此部分描述了Spring Security

基于Spring Security Oauth2的SSO单点登录+JWT权限控制实践

泪湿孤枕 提交于 2019-12-01 12:17:59
概 述 在前文 《基于Spring Security和 JWT的权限系统设计》 之中已经讨论过基于 Spring Security 和 JWT 的权限系统用法和实践,本文则进一步实践一下基于 Spring Security Oauth2 实现的多系统单点登录( SSO )和 JWT 权限控制功能,毕竟这个需求也还是蛮普遍的。 代码已开源,放在文尾,需要自取 理论知识 在此之前需要学习和了解一些前置知识包括: Spring Security :基于 Spring 实现的 Web 系统的认证和权限模块 OAuth2 :一个关于授权( authorization )的开放网络标准 单点登录 (SSO) :在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统 JWT :在网络应用间传递信息的一种基于 JSON 的开放标准(( RFC 7519 ),用于作为 JSON 对象在不同系统之间进行安全地信息传输。主要使用场景一般是用来在 身份提供者和服务提供者间传递被认证的用户身份信息 要完成的目标 目标1:设计并实现一个第三方授权中心服务( Server ),用于完成用户登录,认证和权限处理 目标2:可以在授权中心下挂载任意多个客户端应用( Client ) 目标3:当用户访问客户端应用的安全页面时,会重定向到授权中心进行身份验证,认证完成后方可访问客户端应用的服务

Spring Security 解析(七) —— Spring Security Oauth2 源码解析

独自空忆成欢 提交于 2019-11-30 12:21:47
Spring Security 解析(七) —— Spring Security Oauth2 源码解析 >   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security 、Spring Security Oauth2 等权限、认证相关的内容、原理及设计学习并整理一遍。本系列文章就是在学习的过程中加强印象和理解所撰写的,如有侵权请告知。 > 项目环境: > - JDK1.8 > - Spring boot 2.x > - Spring Security 5.x   在解析Spring Security Oauth2 源码前,我们先看下 Spring Security Oauth2 官方文档 ,其中有这么一段描述: > The provider role in OAuth 2.0 is actually split between Authorization Service and Resource Service, and while these sometimes reside in the same application, with Spring Security OAuth you have the option to split them across two applications, and

【小技巧】spring security oauth2 令牌实现多终端登录状态同步

旧街凉风 提交于 2019-11-30 04:14:31
目的说明 解决不同客户端使用 token ,各个客户端的登录状态必须保持一致,退出状态实现一致。同上述问题类似如何解决不同租户相同用户名的人员的登录状态问题。 默认的DefaultTokenServices 创建逻辑 @Transactional public OAuth2AccessToken createAccessToken(OAuth2Authentication authentication) throws AuthenticationException { // 1. 判断是否存在Token OAuth2AccessToken existingAccessToken = tokenStore.getAccessToken(authentication); OAuth2RefreshToken refreshToken = null; if (existingAccessToken != null) { if (existingAccessToken.isExpired()) { if (existingAccessToken.getRefreshToken() != null) { refreshToken = existingAccessToken.getRefreshToken(); tokenStore.removeRefreshToken

spring security oauth2 自动刷新续签token (refresh token)

青春壹個敷衍的年華 提交于 2019-11-30 03:20:37
1.引言 前提:了解spring security oauth2的大致流程(对过滤器的内容有一定的了解) 主要思路: 首先用过期token访问受拦截资源 认证失败返回401的时候调用异常处理器 通过异常处理器结合refresh_token进行token的刷新 刷新成功则通过请求转发(request.getRequestDispatcher)的方式再次访问受拦截资源 2.源码分析核心过滤器OAuth2AuthenticationProcessingFilter 此过滤器与我们的token的各种操作息息相关,不清楚的可以参考别人的博客进行了解 https://blog.csdn.net/u013815546/article/details/77046453 下面是此过滤器的过滤方法,从中可以知道当授权失败抛出异常的时候将会被catch,并且通过authenticationEntryPoint.commence()调用端点异常处理器,这个被调用的异常处理器就是我们要重写的类 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { final boolean debug = logger

SpringCloud consul 微服务(注册到主机名的问题)- SpringSecurityOAuth2 authorization_code 模式遇到的坑

夙愿已清 提交于 2019-11-29 06:22:32
目前项目在使用consul做服务注册与发现,做SpringSecurityOAuth2 权限认证的authorization_code模式的时候发现一个异常坑爹的问题 这是开始的服务注册代码块 bootstrap.yml: spring: cloud: consul: port: 8500 host: localhost discovery: serviceName: auth locator: lower-case-service-id: true enabled: true register: true 这是注册完后的健康检查 他会把你的主机地址给注册上来。 平时使用可能没问题,但是 当做OAuth2的 authorization_code 模式认证的时候,会出现跨域异常情况如下: 这是请求路径: http://localhost:8001/auth/oauth/authorize?response_type=code&client_id=client_name&redirect_uri=http://localhost:8001/auth/callback&scope=auth 访问后跳转到默认的登录界面: 仔细看,url位置访问地址变成了之前注册的主机名 从而导致的结果就是,点击登录界面出现下图: 没有权限 返回401。 问题就出在了,跳转回主机名导致了跨域问题。

Spring Security 从入门到进阶系列教程

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-28 16:25:31
Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Spring-Boot中的应用》 《Spring-Security-入门(六):QQ登录实现》 《Spring-Security-入门(七):技术图谱》 《Spring Cloud Security系列教程一:入门》 《Spring Security基于哈希认证的记住我实现案例》 《Spring Security 动态权限修改》 《Spring Security 架构》 Spring Security 实战系列 《从零开始的Spring Security OAuth2(一)》 《从零开始的Spring Security OAuth2(二)》 《从零开始的Spring Security OAuth2(三)》 Spring Security 源码分析系列 《 Spring Security(一)—Architecture Overview》 《Spring Security(二)—Guides》 《Spring