某安某大型国企项目Oauth2实践(一)


前言

Oauth2相关介绍
spring Security相关简介
某安某大型国企项目基于Oath2的实践


前言

前不久在研究其他源码时,偶然看到spring官网的一则更新。             https://spring.io/projects/spring-security-oauth


某安某大型国企项目Oauth2实践(一)

spring security 实现 OAuth 的框架分为 spring security OAuth 项目和 spring security 5.2.x 自带的 OAuth 功能,目前 spring security OAuth 已作废,官方推荐使用 spring security 5.2.x 自带的 OAuth,也就是spring-authorization-server。
当时确实惊吓住我了,因为之前一直想写一篇某安公司某大型项目基于Oauth2的登录认证方案,积累了很多人的心血。惊吓之余,也不禁感叹技术的更新之快。让我对新的项目spring-authorization-server充满了好奇,正好看到目前开源项目PIG,就是基于新的认证方案来的。

某安某大型国企项目Oauth2实践(一)

功能很是齐全,大家可以研究研究,和开源项目若依不相上下。

仔细研读了一下代码,发现新的spring-authorization-server很是友好,比以前sping-security-oauth2更容易上手。认证路线也清晰了很多。
当然老的技术也有值得借鉴的地方,在介绍新的技术之前,还是先回顾一下某安公司某大型项目的登录鉴权方案。以此致敬亦师亦友的大佬(现在我们两又在一家外资银行成了同事),以及几年前奋战在一线的平台组同事。


1.Oauth2相关介绍

1.1 Oauth2四种角色

某安某大型国企项目Oauth2实践(一)

1.2 许可类型

某安某大型国企项目Oauth2实践(一)

1.3 使用场景

某安某大型国企项目Oauth2实践(一)

1.4 和https的区别

     https 和oauth2是两个维度的安全,https 解决的是信息的加密传输,oauth2解决的是用access_token来代替用户名和密码的传输。


2.SpringSecurity相关简介


这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权

2.1核心类

2.1.1 Authentication

Authentication 是一个接口,用来表示用户认证信息的,Spring Security方式的认证主体,保护用户信息和权限等

2.1.2 SecurityContext

持有Authentication对象和其他可能需要的信息SecurityContextHolder 提供对SecurityContext的访问

2.1.3 AuthenticationManager

一个用来处理认证(Authentication)请求的接口其中可以包含多个AuthenticationProvider

2.1.4 ProviderManager

AuthenticationManager 的默认实现,主要用来进行认证操作的类 调用其中的authenticate()方法去进行认证操作,但它不直接自己处理认证请求,而是委托给其所配置的 AuthenticationProvider 列表一一认证

2.1.5 AuthenticationProvider

每一种token至少都会有一个provider认证

2.1.6 UserDetail

构建Authentication对象必须的信息,可以自定义,可能需要访问DB得到

2.1.6 UserDetailService

通过username构建UserDetails对象,通过loadUserByUsername根据userName获取UserDetail对象。

2.1.7 passwordEncoder

密码加密器

2.1.8 GrantedAuthority

对认证主题的应用层面的授权,含当前用户的权限信息,通常使用角色表示。

2.1.9 UserDetail和Authorition的区别

UserDetail:从数据库中查出来的用户基本数据。

Authorition:经过spring security认证之后得到的包含权限等数据的认证实体

如你所见,整个springSecurity+Oauth2认证体系还是比较复杂的,这也是为什么spring 要把oauth2 认证服务单独拆开,重新设计的原因。不过大体思想还是一致的。

3.某安某大型国企项目基于Oath2的实践

先来张简易的架构图,图画的不好,毕竟不是做架构师的料

某安某大型国企项目Oauth2实践(一)


第一篇就先到这吧,正好有点事要出去一趟。根据前面的反馈,一篇写太长了,影响观看,各位客官如果想继续看后面的,请保持关注。


某安某大型国企项目Oauth2实践(一)



某安某大型国企项目Oauth2实践(一)
关注我的你,是最香哒!


原文始发于微信公众号(小李的源码图):某安某大型国企项目Oauth2实践(一)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/145335.html

(0)

相关推荐

  • [js基础]伪数组是个啥?

    什么是伪数组 具有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解) 按索引方式存储数据 不具有数组的方法, 比如…

    2022年11月23日
    00
  • 能ping通,TCP就一定能连通吗?

    平时,我们想要知道,自己的机器到目的机器之间,网络通不通,一般会执行ping命令。 一般对于状况良好的网络来说,你能看到它对应的loss丢包率为0%,也就是所谓的能ping通。如果…

    2022年11月12日
    00
  • 【Python项目实战】构建GUI桌面计算器(中)

    前情回顾 在上期教程中,我们向大家简单介绍下PyQt的基础概念及安装方法,同时教给大家一些基础的PyQt入门知识,包括相关的一些组件集合以及构建窗口的方法。 【Python项目实战…

    2022年11月23日
    00
  • SpringBoot接口自定义序列化

    需求背景 在我们写接口的时候可能会有这样的需求,例如对于BigDecimal类型的字段有时候需要显示到小数点后两位,有时候需要显示成百分比,有时候则取整。 @Datapublic&…

    2023年1月11日
    00
  • Jetpack Room使用

    Room使用 回顾 数据库有多张表,一张表只能记录一种Class,Class的具体属性是这个表的列;所有对表的操作都要通过Dao来访问 注解说明: @Enity 作用于Class上…

    2023年1月15日
    00
  • 深入理解 SQL 中的 Grouping Sets 语句

    前言 SQL 中 Group By 语句大家都很熟悉,根据指定的规则对数据进行分组,常常和聚合函数一起使用。 比如,考虑有表 dealer,表中数据如…

    2023年1月10日
    00
  • 【Java 基础】– 注解

    java注解是Java5引入的重要语言特性之一,它可以提供描述程序所需元数据信息,而这些信息是无法使用Java语言进行表达的。 注解的引入可以使我们能够使用编译器来验证格式,并存储…

    2022年12月5日
    00
  • Spring进阶-Bean的作用域

    前言 用过spring的都知道在我们定义完BeanDefinition后,Spring会根据我们的BeanDefinition去创建实例。但是你有没有想过,Spring根据Bean…

    2023年1月11日
    00
  • CountDownLatch和CyclicBarrier的区别和应用场景

    一、前言 在JDK的并发包里提供了几个非常有用的并发工具类。如线程等待的CountDownLatch和CyclicBarrier。 二、CountDownLatch CountDo…

    2022年12月9日
    00
  • 「项目实战」优化项目构建时间

    背景 前几天晚上下班的时候, 路过隔壁项目组, 听他们在聊项目构建的事: 现在线上打包时间太长了, 修个 bug 1 分钟, 发布一下半小时, 贼难受。 他们项目比较庞大, 线上构…

    2022年11月23日
    00

发表回复

登录后才能评论