簡體   English   中英

Spring 引導 jwt 僅認證

[英]Spring boot jwt authentication only

我試圖在沒有任何授權的情況下實施 spring 引導身份驗證。 如此簡單的登錄、注冊和個人資料 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. 登錄后,將像往常一樣發出訪問令牌和刷新令牌

基於 Dockerised 角色的訪問系統和高級可修改用戶 API 訪問系統

Spring 安全性,JWT,基於 API 的數據庫身份驗證

https://github.com/abhitkumardas/rbac

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM