일방향 암호 알고리즘
암호화: 평문 -> 암호화 알고리즘 -> 암호문
복호화: 불가
사용자는 로그인 할 때 패스워드(평문)입력 -> 서버에 로그인 요청
서버: 평문 -> 암호화 알고리즘 -> 암호문
DB에 저장된 아이디, 패스워드(암호문) 일치 여부 확인
패스워드 암호화 적용하기
BCrypt 해시함수 사용
BCrypt 해시함수: 스프링 시큐리티에서 권고하는 암호화 적용 방법
1. 암호화 알고리즘을 빈(Bean)으로 등록
로그인, 로그아웃 처리 과정 이해
스프링 시큐리티 사용 전
Client: 클라이언트가 username, password로 로그인 시도 -> 인증 관리자에게 요청
Authentication Manager(인증 관리자): 클라이언트에게 받은 usernam을 UserDetails Service로 보냄
UserDetails Service: 회원 정보 DB에서 회원 정보를 usename으로 조회, 성공 -> 회원 상세정보(UserDetails)생성, 실패 -> Error 발생
Authentication Manager(인증 관리자)는 로그인 한 username, password와 UserDetails 일치 여부 확인
일치: 로그인 성공 -> Session 생성, 불일치: Error 발생
세션 아이디 발급해서 유효시간까지 인증
- 회원 상세정보 (UserServiceImpl) 를 통해 "권한 (Authority)" 설정 가능
- 권한을 1개 이상 설정 가능
- "권한 이름" 규칙
- "ROLE_" 로 시작해야 함
"**USER**" 권한 부여 → "**ROLE_USER**"
- 예) "ADMIN" 권한 부여 → "ROLE_ADMIN"
- "ROLE_" 로 시작해야 함
- 스프링 시큐리티를 이용한 API 별 권한 제어 방법
- Controller 에 "@Secured" 어노테이션으로 권한 설정 가능
- @Secured("권한 이름") 선언
- 권한 1개 이상 설정 가능
- @Secured("권한 이름") 선언
- Controller 에 "@Secured" 어노테이션으로 권한 설정 가능
// (관리자용) 등록된 모든 상품 목록 조회
@Secured("ROLE_ADMIN")
@GetMapping("/api/admin/products")
public List<Product> getAllProducts() {
return productService.getAllProducts();
}
"@Secured" 어노테이션 활성화 방법
@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
@EnableGlobalMethodSecurity(securedEnabled = true) // @Secured 어노테이션 활성화
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
일반회원과 관리자
1. 프론트 개발자와 작업 방법 논의
서버에서 역할을 프론트에 내려줄 수 있는 방법
1) 로그인 성공 시 Response에 회원 Role 추가
2) 쿠키 사용: 세션 유지를 위해 쿠키 설정
3) indwx.html에 admin 데이터 추가
관리자인 경우에만 "admin" id를 가진 <div>추가 (동적 웹 페이지 사용)
프론트 개발자 작업: "admin" id가 내려오면 관리자로 판단 -> 상품 조회 시 역할별로 분리하여 API 호출
'오늘의 공부 & 기록' 카테고리의 다른 글
📝 쿠키와 세션 (0) | 2022.11.18 |
---|---|
프로그래밍 케이스 스타일(Case Styles) 카멜/케밥/파스칼/스네이크 (0) | 2022.11.15 |
모각지 특강 (0) | 2022.11.10 |
기술 면접 준비 (0) | 2022.11.02 |
인텔리제이(IntelliJ) JPA로 만들어진 ER다이어그램(ERD) 보기 (0) | 2022.09.13 |