zoukankan      html  css  js  c++  java
  • 关于spring-cloud-starter-oauth2源码跟踪笔记

    1、主要分析无session的情况下,即令牌模式,已经认证过的用户,如何进行资源访问控制,其原理与spring security类似,但是不同的是spring security不对令牌进行处理。

    2、spring security第一次认证通过后,需要手动生成令牌,第二次访问,也需要自己编写过滤器手动解析令牌,并且需要手动通过SecurityContextHolder进行认证上下文设置,这种方式比较灵活。

    3、对于spring-cloud-starter-oauth2有所不同,令牌是由系统生成,也由系统解析,当然它提提供了可重写的接口

         但是,它写的真的和spring security不是一个级别的,

         其中有个硬编码,判断map中是否有"user_name",而不是"username",之前oath2各种判断用的都是"username",到二次过滤时突然换成"user_name",导致userAuthentication一直为null,

        所以我怀疑这两个安全模块不是一波人写的,spring官方也在2020年也发布迁移计划,即将从Spring Security OAuth 2.x 到 Spring Security 5.2.x的迁移。我猜他们同时并行两个安全框架也是心中一千个CNM。

    4、对于spring-cloud-starter-oauth2源码跟踪,应该从OAuth2AuthenticationProcessingFilter过滤器开始,

         其中关键步骤是Authentication authResult = authenticationManager.authenticate(authentication)真是熟悉的配方,可惜到后面就有点不行了。

    5、源码中UserAuthenticationConverter接口里硬编码是是否能生成userAuthentication的关键。

    final String USERNAME = "user_name";

    6、要么就是自定义令牌转换器的时候塞一个"user_name",要么自己写个过滤器重新生成一个Authencation,两种方式都是解决userAuthentication为null的问题。

    7、为啥userAuthentication为null的时候spring-cloud-starter-oauth2的二次访问安全上下文没有问题呢?

         因为spring-cloud-starter-oauth2重点在于判断客户端id和密钥,认为有这两个就ok,这是指认证以后,二次带token访问的情况。

    8、补充spring-cloud-starter-oauth2认证模式中密码模式:经过两次认证,分别对客户端和用户进行认证

         客户端认证:首先通过BasicAuthenticationFilter使用HttpBasic认证,完成进入用户认证

         用户认证:  然后通过根据重写UserDetailService实现类通过DaoAuthenticationProvider进行用户认证(指用户信息放在数据库的情况)

  • 相关阅读:
    快使用阿里云的maven仓库
    谈谈对MVC、MVP和MVVM的理解
    [个人项目] 使用 Vuejs 完成的音乐播放器
    手把手教你封装 Vue 组件并使用 NPM 发布
    Chrome 的 Material Design Refresh UI初探
    Vue图片懒加载插件
    手淘的移动端适配方案flexible
    css 实现元素长宽等比缩放
    css 中 stick footer 布局实现
    页面滚动插件 better-scroll 的用法
  • 原文地址:https://www.cnblogs.com/asker009/p/13361270.html
Copyright © 2011-2022 走看看