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进行用户认证(指用户信息放在数据库的情况)

  • 相关阅读:
    HDOJ 1207 汉诺塔II
    [转]写代码的小女孩
    POJ Subway tree systems
    HDOJ 3555 Bomb (数位DP)
    POJ 1636 Prison rearrangement (DP)
    POJ 1015 Jury Compromise (DP)
    UVA 10003
    UVA 103 Stacking Boxes
    HDOJ 3530 Subsequence
    第三百六十二、三天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/asker009/p/13361270.html
Copyright © 2011-2022 走看看