• spring security auth2.0实现


    在这里插入图片描述

    OAuth 2.0 的认证/授权流程  jwt只是认证中的一步
    4中角色 资源拥有者(resource owner)、客户端(client 第三方)、授权服务器(authorization server)和资源服务器(resource server)。
    Authorization Code(授权码模式):OAuth2的授权模式,客户端先将用户导向认证服务器,登录后获取授权码,然后进行授权,最后根据授权码获取访问令牌;(先向服务器认证获取授权码,然后用这个授权码访问获取令牌)
    隐式授权模式/简化模式  密码模式(自己开发的代码访问)   客户端凭证模式
    当访问令牌过期时 去续期
    
    AuthorizationServerConfig 授权服务器 包括了client名称,客户端secret,可授权类型有哪些,令牌过期时间,服务资源的唯一标识resourceIds,scopes范围
    ResourceServerConfig 资源服务器  @PreAuthorize("hasAuthority('back:user:role:set')") oauth2的http配置
    WebSecurityConfig 在内存中构建身份验证 springsecurity的http配置
    UserDetailsService 返回principal主体用户信息UserDetails和passwordEncoder进行验证比较 信息存到上下文!
    身份验证的是AuthenticationManager接口,ProviderManager是它的一个默认实现,委托给配置好的AuthenticationProvider(账号+密码/短信/验证码)
    拿到了access_token和refresh_token  refresh_token 的存在可以减小长期访问令牌(Access Token)的风险  
    refresh_token是需要客户端秘钥 client_secret   过期并且重新获取的access_token中的refresh_token还是之前的 不然过期时间没意义
    
    配置客户端信息 client-id client-secret redirect scope authorization-grant-type
    配置认证服务器信息 @EnableOAuth2Client和@EnableOAuth2Sso
    token-uri为认证服务器颁发token的地址
    authorization-uri为用于用户授权的页面地址
    user-info-uri为获取用户信息的地址
    spring.security.oauth2.client.provider.demo-server.user-info-uri=http://localhost:8081/userinfo  服务器需要提供这个接口获取用户信息
    配置WebSecurityConfig 那些请求要去认证
    
    如何在不同的请求获取相同认证信息
    每次请求都会从session获取信息set到threadlocal中 离开在threadlocal中清除信息
     // 在此处从会话中获取认证信息
    Authentication authentication = MySessionStorage.getStoredAuthentication();
    // 将认证信息设置回SecurityContextHolder以便在请求中使用
    SecurityContextHolder.getContext().setAuthentication(authentication);
    
    
    如何从子线程获取认证信息!
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    -Dspring.security.strategy=MODE_INHERITABLETHREADLOCAL
    InheritableThreadLocal  创建后主线程修改信息,子线程是感知不到这个变化的。
    void createMap(Thread t, T firstValue) {
        t.inheritableThreadLocals = new ThreadLocalMap(this, firstValue); //父线程中的inheritableThreadLocals变量
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    小熊派-FreeRTOS配置任务
    FastBee商业版本源码获取下载
    蓝桥杯:时间显示
    ATT&CK红队评估实战靶场二
    MATLAB算法实战应用案例精讲-【数模应用】梯度下降(GD)(附R语言、Python和MATLAB代码)
    DispatcherServlet 分发流程
    小程序上新(2022.11.15~11.28)
    GD32f103系列教程—(时钟篇)
    国庆day4
    【微信小程序】全局配置
  • 原文地址:https://blog.csdn.net/heqiang1995/article/details/133168050