• 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
  • 相关阅读:
    ch1_系统启动_bootsect.s
    Hacker 资讯|11 月中下旬区块链黑客松活动汇总
    支持目标打卡,活力三环让运动更有趣
    线性代数基础-矩阵
    面试:聊一聊 Java 数组默认的排序算法,我懵了
    最新基于 R 语言 lavaan 结构方程模型(SEM)实践技术应用
    Nautilus Chain全球行分享会,上海站圆满举办
    极客日报:豆瓣回应删除用户相册图片:低概率bug;传阿里平头哥校招IC岗在成都开出50万天价薪资;Qt 6.2.1正式发布
    [Linux]shell文本处理记录 - 查找、增删特定行及附近行
    基于 FFmpeg 的跨平台视频播放器简明教程(十):在 Android 运行 FFmpeg
  • 原文地址:https://blog.csdn.net/heqiang1995/article/details/133168050