zoukankan      html  css  js  c++  java
  • OAuth2简易实战(二)-模拟客户端调用

    1. OAuth2简易实战(二)

    1.1. 目标

    1. 模拟客户端获取第三方授权,并调用第三方接口

    1.2. 代码

    1.2.1. 核心流程

    1. 逻辑就是从数据库读取用户信息,封装成UserDetails对象,该逻辑在用户进行登录时调用,验证由Spring Security框架完成
    @Service("clientUserDetailsService")
    public class ClientUserDetailsService implements UserDetailsService {
    
        @Autowired
        private UserRepository users;
    
        @Override
        public UserDetails loadUserByUsername(String username)
                throws UsernameNotFoundException {
            Optional<ClientUser> optionalUser = users.findByUsername(username);
    
            if (!optionalUser.isPresent()) {
                throw new UsernameNotFoundException("invalid username or password");
            }
    
            return new ClientUserDetails(optionalUser.get());
        }
    
    }
    
    1. 验证核心代码
    @Configuration
    @EnableWebSecurity
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    
        @Autowired
        @Qualifier("clientUserDetailsService")
        private UserDetailsService userDetailsService;
    
        @Override
        protected void configure(AuthenticationManagerBuilder auth)
                throws Exception {
            auth.userDetailsService(userDetailsService);
        }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests().antMatchers("/", "/index.html").permitAll().anyRequest().authenticated().and()
                .formLogin().and()
                .logout().permitAll().and()
                .csrf().disable();
        }
    
    }
    
    1. 验证完成后,进入controller方法,判断token不存在,调用授权连接,后续操作同上一篇的授权码模式,在认证通过后,继续转发调用controller
    2. 整个流程核心是模拟oauth的http调用
    3. 完整代码参看 https://github.com/spring2go/oauth2lab 中lab02

    1.3. 流程效果

    1. 访问客户端
    2. 跳转客户端登录
    3. 登陆后跳转授权登录
    4. 确认授权
    5. 跳转主页并获取资源服务器信息
  • 相关阅读:
    HDU 4081 Peach Blossom Spring (最小生成树+dfs)
    查看u盘格式
    eclipse使用外部maven时multiModuleProjectDirectory错误解决
    Centos更换yum源,安装ssh server
    gerrit push配置
    netstat
    java多维数组
    RESTful架构3--开发实战
    RESTful架构2--架构详解
    RESTful架构1--架构理解
  • 原文地址:https://www.cnblogs.com/sky-chen/p/10528282.html
Copyright © 2011-2022 走看看