스프링 시큐리티 복습
참고 230706 스프링 시큐리티 auth 프로젝트, 0707 JWT, 0710 Filter, 0711 OAuth2
스프링 시큐리티 목적 :
- 회원가입, 로그인, 로그아웃 등
- 서비스에는 사용자라는 개념이 존재한다.
- 인증(Authentication) : 사용자가 자신이 누구인지를 증명하는 과정
- 권한(Authorization) : 사용자가 어떤 작업을 수행할 수 있는지를 결정하는 과정
순서
1. 스프링생성 시 스프링 시큐리티 넣어서 생성하기
2. 인증 필요 설정 RootController
WebSecurityConfig 빈 객체 반환 메소드 정의
.authorizeHttpRequests() 첫번째 메소드 설정
3.하나의 requestMathers에 어떤 방식(예) authenticated, annoymous 등) 으로 할 지 하나씩 넣는 것임
4. 스프링 시큐리티만 추가해줘도 기본 로그인 페이지가 나온다.
기본설정을 하면 기본 로그인 페이지 사라짐
Form Login
✅ 로그인 : 가장 기본적인 사용자 인증 방식
- 사용자가 로그인 페이지로 이동
- 서버는 사용자를 로그인 페이지로 이동
- 사용자는 로그인페이지를 통해 아이디와 비밀번호 전달(form 양식 사용, input, input,... )각각 아이디 네모, 비밀번호 네모
- 아이디와 비밀번호 확인 후 사용자를 인식
이후 쿠키를 이용해 방금 로그인한 사용자를 세션을 이용해 기억한다.
로그인 구현하기
- 로그인을 하기 위한 엔드포인트를 정의하는 UserController 생성 (@slf4j, @controller, @requestmapping("users") 등 사용)
- 로그인 페이지를 보여주기 위한 /login, 로그인한 사용자가 자신의 정보를 확인하기 위한 /my-profile 생성
0707 복습
jpa와 sqlite를 이용해서 사용했다
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.xerial:sqlite-jdbc:3.41.2.2'
runtimeOnly 'org.hibernate.orm:hibernate-community-dialects:6.2.4.Final'
spring:
datasource:
url: jdbc:sqlite:db.sqlite
driver-class-name: org.sqlite.JDBC
username: sa
password: password
jpa:
hibernate:
ddl-auto: create
database: h2
database-platform: org.hibernate.community.dialect.SQLiteDialect
show-sql: true
userentity에는 내가 넣고 싶은 사용자 정보 목록 만들기
Long id, string username, string password, string email, string phone 등등
💡 UserEntity와 UserDetails 차이점
- userentity : jpa 엔티티 즉 데이터베이스 연결되어있는 엔티티를 나타내기 위한 것
- userdetails : 스프링 시큐리티가 서로 필요한 기능들을 사용하기 위한 객체임 Userentity에 userdatials는 분리하는 게 좋다 (관심사 분리 안나누고하면 entity에 기능이 너무 많이 지기 때문에 , entity에는 내가 넣고 싶은 기능, datails는 좀 더 간단하게)
JWT 복습 JSON Web Token
header.payload.signature
헤더
페이로드.
시그니처 총 3부분으로 나뉨
기능
- 사용자 확인을 위한 인증 정보
- 위변조 확인이 용이 -> 위변조가 어려움
- 토큰 기반 인증 시스템에서 많이 활용
토큰을 사용하면 더 이상 서버에서 세션을 관리하지 않아도됨 세션을 저장하지 않고 토큰의 소유를 통해 인증 판단
- 상태를 저장하지 않기 때문에 서버 세션 관리 불필요
- 토큰 소유가 곧 인증임 -> 여러 서버에 걸쳐서 인증이 가능
- 쿠키는 요청을 보낸 클라이언트에 종속되지만, 토큰은 쉽게 첨부가 가능함 (주로 헤더에서 첨부)
jwt 는 암호화 과정이 필요하므로 @value 어노테이션을 통해서 yaml에 jwt: secret: afdggljgfjl~~~ 입력해서 사용하면 된다.
JJWT 라이브러리
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
apllication-prod.yaml 을 하나더 만들어서 토큰값이나 암호등을 따로 관리 할 수 있음 (깃에는 토근이나 암호가 올라가면 안된다 )
0710 스프링 시큐리티와 필터
0711 OAuth2
참고 15_oauth 프로젝트
open Authorization
- 다른 서비스의 사용자 정보를 안전하게 위임받기 위한 표준
- 로그인을 대신 해주는 기술이 아니다
- 사용자가 어떤 서비스에 소셜 로그인을 진행하고 싶을 때 해당 서비스에 직접 인증, 정보를 주지 않아도 나의 정보를 조회할 수 있도록 권한을 위임하는 기술이다
네이버 아이디 로그인 (네이버, 카카오, 구글 등)
'Spring' 카테고리의 다른 글
[Spring] 스프링 부트 게시판 만들기 (1) (0) | 2023.08.01 |
---|---|
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (4) (0) | 2023.07.25 |
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (3) (0) | 2023.07.24 |
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (2) (0) | 2023.07.24 |
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (1) (0) | 2023.07.23 |