티스토리 뷰
https://www.inflearn.com/course/스프링부트-시큐리티/dashboard
인프런 강의를 듣고 정리한 글이다.
JWT (Json Web Token)
Json 객체. 디지털 서명이 되어 있음. HMAC 알고리즘 혹은 RSA 사용
구조
xxxxx.yyyyy.zzzzz- x: header
- y: payload
- z: signature
header
{ "alg" : "HS256", "typ" : "RSA" }형태의 JSON을 Base64Url Encoding
payload
- private claim: user id 같은 정보를 넣음
signature
HMACSHA256(header + "." + payload, secret key)header + payload를 서버만 아는 secret key 로 암호화. HS256
Base64(header) + Base64(payload) + Base64(signature) 로 해서 사용자에게 줌
웹 브라우저 (로컬 스토리지 or 세션 스토리지) 에 저장
검증: 복호화한 후, 다시 signature 를 만들어서 같은지 확인
secret key만 여러 서버가 동일하게 들고 있으면 인증 가능
HMAC: secret key 를 포함한 암호화 방식
SHA256: hash algorithm
Http Basic 인증 방식
- 쿠키에 담지 않고 Header의
Authorization에ID, PW를 넣는 방식 - https 를 사용해야 암호화가 되어서 날아감. 노출이 되면 위험
- 쿠키에 담지 않고 Header의
Http Bearer 인증 방식
Authorization에 token 을 담는 방식- 노출이 되어도 아이디, 패스워드가 알려지지 않음. 물론 토큰이 노출되면 유효 시간 동안은 타인도 사용 가능
Spring security
- 권한 관리를 위해 세션에 UserDetails 를 담고 있음 (ex. hasAuthority(’CREATOR’))
- 굳이 세션에 저장 안해도 됨. security가 관리해주어서 현하려고 하는 거임
XSS (Cross Site Scripting)
- script 를 넣어서 타겟 서버에서 스크립트가 실행되게 하는 것
- 정보를 빼올 수 있다
CSRF (Cross Site Request Forgery)
- 공격자가 중간에 request를 탈취해서 피해자인척 서버에 요청하는 해킹방식
- 인증 값을 탈취하여 사용
어디에 저장?
- local storage
- cookie 에 저장
- 가장 좋은 방법
- refresh token 을 제공하여 새로고침 때마다 access token 을 받아오도록 하는 것
- refresh token 을 알더라도 access token을 모르기 때문에 소용 없음
- HttpEntity
- Spring Security의 XML.
- 설정값을 갖고 있는 객체
- SecurityConfig.configure(HttpEntity http)
- HttpEntity에 설정값을 넣는 메서드
- SecurityContextHolder는 SecurityContext를 관리하는 객체.
- SecurityContext 은 Authentication을 가짐
'Spring' 카테고리의 다른 글
| Webclient (0) | 2023.06.20 |
|---|---|
| Controller의 response 는 model 과 다른 필드를 가지거나 숨겨야 하는 경우가 있는데 어떻게 설계? (0) | 2021.12.22 |
| WebClient 와 WebFlux (0) | 2021.12.22 |
| Spring Error Handling (0) | 2021.12.22 |
| Cacheable annotation (0) | 2021.12.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 이펙티브자바
- ruby
- Lombok
- 메모리 릭
- ActiveAdmin
- Spring-Boot
- 실용주의
- IntelliJ
- querydsl
- 이벤트스토밍
- aws
- point
- 코테 log
- effective-java
- SHA
- Generic
- TroubleShooting
- Git
- annotation
- 사고..
- WebClient
- gitignore
- ASCII
- fetchResults
- 암호화
- Java
- DesignSystem
- sort algorithm
- Encoding
- SQL 전문가 가이드
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
글 보관함