【问题标题】:Spring boot jwt authentication only仅 Spring Boot jwt 身份验证
【发布时间】:2022-10-05 23:23:33
【问题描述】:

我正在尝试在没有任何授权的情况下实现 Spring Boot 身份验证。如此简单的登录、注册和个人资料 api,其中登录和注册 api 已被允许所有人使用,而个人资料仅适用于经过身份验证的用户。

大多数教程都关注 RBAC 和身份验证,而我只想关注身份验证部分。

我已经在分散的教程的帮助下创建了基本结构。

我的身份验证控制器:

    private final AuthService authService;

    @PostMapping(\"/signin\")
    public ResponseEntity<?> signin(@RequestBody SigninRequest signinRequest) {
        String email = signinRequest.getEmail();
        log.info(\"email : {}\", email);
        String password = signinRequest.getPassword();
        User user = authService.signin(email, password);
        return ResponseEntity.ok().body(user);
    }

    @PostMapping(\"/signup\")
    public ResponseEntity<User> signup(@RequestBody User user){
        URI uri = URI.create(ServletUriComponentsBuilder.fromCurrentContextPath().path(\"/api/v1/auth/signup\").toUriString());
        return ResponseEntity.created(uri).body(authService.signup(user));
    }

我的 AuthServiceImpl:

public class AuthServiceImpl implements AuthService, UserDetailsService {
    private final AuthRepository authRepository;
    private final PasswordEncoder passwordEncoder;

    @Override
    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
        User user = authRepository.findByEmail(email);
        if (user == null) {
            throw new UsernameNotFoundException(email);
        } else {
            log.info(\"User found: {}\", user);
        }
        return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), new ArrayList<>());
    }

    @Override
    public User signup(User user) {
        String encodedPassword = passwordEncoder.encode(user.getPassword());
        user.setPassword(encodedPassword);
        return authRepository.save(user);
    }

    @Override
    public User signin(String email, String password) {
        // handle login ??
        return user;
    }
}

一切都很顺利,直到每个教程都达到将权限或角色发送回客户端的地步。我希望只进行此应用程序身份验证。

我现在的安全配置:

public class SecurityConfig extends WebSecurityConfigurerAdapter {
    private final UserDetailsService userDetailsService;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.authorizeRequests()
                .antMatchers(\"/api/v1/auth/signin\").permitAll()
                .antMatchers(\"/api/v1/auth/signup\").permitAll()
                .antMatchers(\"/api/v1/auth/profile\").authenticated();
        http.httpBasic();
    }
}

我的计划很简单:

  1. 用户可以注册
  2. 用户可以登录
  3. 登录后,将像往常一样发出访问令牌和刷新令牌

    标签: spring spring-boot


    【解决方案1】:

    一个 Dockerised 基于角色的访问系统和高级可修改的用户 API 访问系统

    基于 API 的 Spring Security、JWT、基于 DB 的身份验证

    https://github.com/abhitkumardas/rbac

    【讨论】:

      猜你喜欢
      • 2018-02-27
      • 2021-07-20
      • 2022-08-16
      • 2018-08-29
      • 2018-10-27
      • 2022-01-15
      • 2021-08-22
      • 2017-11-02
      • 2018-11-29
      相关资源
      最近更新 更多