블로그 프로젝트의 카카오 로그인 기능은 사용자가 처음 카카오 로그인을 진행하면 자동으로 회원가입이 진행됩니다. 이때 개발자가 정해놓은 정적인 유니크 키에 의해 비밀번호가 저장되는데, 이런 로직은 서비스 상 문제가 발생할 수 있습니다.
유니크 키 유출 문제
유니크 키가 유출될 경우, 카카오 로그인을 사용하는 모든 사용자의 계정이 위험해집니다. 유니크 키가 유출된다면, 해당 키를 알고 있는 사용자는 모든 카카오 로그인 사용자의 계정에 로그인할 수 있습니다.
비밀번호 변경 문제
카카오 로그인 사용자가 비밀번호를 수정한 이후에 다시 로그인하면, 블로그 프로젝트 로직상으로는 정상적인 스프링 시큐리티 로그인이 불가능합니다. 이 문제를 해결하려면, 카카오 로그인(OAuth를 이용한 로그인) 사용자가 비밀번호를 변경할 수 없도록 설정해주는 것이 좋습니다.
이를 위해 User 테이블에 oauth 컬럼을 추가해 주었습니다. oauth 컬럼은 해당 사용자가 카카오, 구글 등 oauth 로그인 사용자인지, 일반 사용자인지의 데이터를 가집니다.
아래의 코드처럼 스프링 시큐리티 로그인 정보의 oauth 데이터를 통하여 비밀번호 수정의 가능 여부를 결정하게 서비스를 수정하였습니다.
<div th:if="${#authentication.principal.user.oauth == null}" class="mb-3">
<label for="password" class="form-label">Password:</label>
<input type="text" class="form-control" id="password" placeholder="Enter password"
name="password">
</div>
<div th:if="${#authentication.principal.user.oauth == null}" class="mb-3 mt-3">
<label for="email" class="form-label">Email:</label>
<input type="email" class="form-control" id="email"
th:value="${#authentication.principal.user.email}"
placeholder="Enter email" name="email">
</div>
<div th:unless="${#authentication.principal.user.oauth == null}" class="mb-3 mt-3">
<label for="email" class="form-label">Email:</label>
<input type="email" class="form-control"
th:value="${#authentication.principal.user.email}"
placeholder="Enter email" name="email" readonly>
</div>
@Transactional
public void update(User requestUser) {
User persistenceUser = userRepository.findById(requestUser.getId()).orElseThrow(
() -> {throw new IllegalArgumentException("회원수정 실패: 회원 정보가 존재하지 않습니다.");
});
//validate 체크
if (persistenceUser.getOauth() == null || persistenceUser.getOauth().equals("")) {
persistenceUser.setPassword(encoder.encode(requestUser.getPassword()));
persistenceUser.setEmail(requestUser.getEmail());
}
}
'오류 해결기' 카테고리의 다른 글
[Git] PR을 메인 브랜치로 잘못 머지한 상황 (0) | 2023.06.30 |
---|---|
[DB] JPA 무한참조 문제 (0) | 2023.03.18 |
[oAuth 2.0] 카카오 DB정보와 일치하지만 로그인에 실패하는 상황 (0) | 2023.03.18 |
[Spring Security] 회원정보 수정 시 최신화 되지 않는 문제 (0) | 2023.03.18 |
[SpringSecurity, Thymeleaf] authorize메서드가 인식 되지 않는 상황 (0) | 2023.03.18 |