728x90
반응형
세션정보는 기본적으로 30분으로, 30분이 지나면 로그인 정보는 사라진다.
server.servlet.session.timeout=30m
-> application.properties에서 설정으로 바꿔줄 수 있다.
세션이 종료되어도 로그인 유지가 가능하게 하려면 암호화해서 담아둬야한다.
-> rememberme.cookie 내 유저의 패스워드로 인증을 한다.
쿠키를 탈취당하지 않도록 해야한다.
-> 쿠키를 탈취당하면 해킹당한 것과 같다.
로그아웃을 한다면 쿠키와 세션을 날리도록 설정
-> 해쉬기반의 쿠키를 사용하는 것이 아닌, 쿠키안에 랜덤한 문자열을 만들어 같이 저장하고 매번 인증할 때 바뀌도록
하지만, 이경우에도 탈취당했을 경우 해커만 탈취한 쿠키로 인증할 수 있는 문제 발생
-> Username, 토큰(랜덤, 매번 변경), 시리즈 (랜덤, 고정)
-> 모든 토큰을 삭제해 탈취한 쿠키를 사용하지 못하게 방지하는 방법을 사용한다.
- 쿠키만 인증 수단으로 사용
- 쿠키 + 토큰을 인증 수단으로 사용
- 쿠키 + 토큰 + 시리즈를 인증 수단으로 사용
- 쿠키가 탈취당했을 경우,
유효하지 않는 토큰 + 유효한 시리즈로 접속하게 되고, 이런 경우 탈취한 쿠키를 사용하지 못하도록 방지
- 쿠키가 탈취당했을 경우,
login
<!--로그인 유지를 위한 처리 -->
<div class="form-group form-check">
<input type="checkbox" class="form-check-input" id="rememberMe" name="remember-me" checked>
<label class="form-check-label" for="rememberMe" aria-describedby="rememberMeHelp">로그인 유지</label>
</div>
PersistentLogins
package com.demo.domain;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Getter;
import lombok.Setter;
//테이블명 -> 엔터티 -> getter, setter 자동생성 어노테이션
@Table(name = "persistent_logins")
@Entity
@Getter @Setter
public class PersistentLogins {
//맵핑이 되는 엔터티 클래스 작성
@Id
@Column(length = 64)
private String series;
@Column(nullable = false, length = 64)
private String username;
@Column(nullable = false, length = 64)
private String token;
@Column(name = "last_used", nullable = false, length = 64)
private LocalDateTime lastUsed;
}
SecurityConfig
//회원가입을 위한 시큐리티 수동 설정
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {
// 로그인 기억 처리를 위한 의존성 주입
private final AccountService accountService;
// jdbc는 데이터소스를 필요로 하기 떄문에 의존성 주입 -> JPA를 사용하기 떄문에, bean으로 등록이되어있다.
private final DataSource dataSource;
private PersistentTokenRepository tokenRepository() {
// TODO Auto-generated method stub
JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
jdbcTokenRepository.setDataSource(dataSource);
// 토큰 리파지토리에 데이터 소스 주입 -> 리파지토리가 사용하는 테이블 작성 -> 해당 스키마에 필요한 엔터티를 Account에 추가
return jdbcTokenRepository;
}
728x90
반응형
'Server Programming > Spring Boot Full-Stack Programming' 카테고리의 다른 글
[스프링 풀스택 클론 코딩] Open EntityManager (또는 Session) In View 필터 (0) | 2022.09.01 |
---|---|
[스프링 풀스택 클론 코딩 - 회원가입] (1-20) 가입 일자 데이터의 변경이 DB에 반영되지 않는 버그 (0) | 2022.09.01 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-18) 로그인 로그아웃 (0) | 2022.08.30 |
[스프링 풀스택 클론 코딩 - 회원가입] (1-17) 가입 확인 이메일 재전송 (0) | 2022.08.30 |
[스프링 풀스택 클론 코딩] 인증된 사용자와 미인증 사용자 분류 (0) | 2022.08.30 |