코딩공작소
Springboot3 실습 (5) - Oauth2로 로그인/로그아웃 구현 본문
OAuth란?
제3의 서비스에 계정관리를 맡기는 것.
리소스 오너 정보를 취득하는 4가지 방법
- 권한 부여 코드 승인 타입
- 암시적 승인 타입
- 리소스 소유자 암호 자격증명 승인 타입
- 클라이언트 자격증명 승인 타입
권한 부여 코드 승인 타입
- 권한 요청이란?
클라이언트, 즉, 스프링 부트 서버가 특정 사용자 데이터에 접근하기 위해 권한 서버, 즉, 카카오나 구글 권한 서버에 요청을 보내는 것
GET spring-authorization-server.example/authorize?
client_id=66a36b4c2&
redirect_uri=http://localhost:8080/myapp&
response_type=code&
scope=profile
- client_id : 인증 서버가 클라이언트에 할당하나 고유 식별자. OAuth 서비스에 등록할 때 서비스에 생성하는 값
- redirect_uri : 로그인 성공 시 이동해야 하는 URI
- response_type : 인증 코드를 받을 때는 code값을 포함해야 한다. 클라이언트가 제공받길 원하는 응답 타입
- scope : 제공받고자 하는 리소스 오너의 정보 목록
데이터 접근용 권한 부여
인증 서버에 처음 요청을 보낼 때에만 로그인 페이지로 변경하고 사용자의 데이터 접근 동의를 얻는다. 그 후부터는, 로그인만 진행한다. 로그인이 성공하게 되면 권한 부여 서버는 데이터에 접근할 수 있게 인증 및 권한 부여를 수신
인증 코드 제공
사용자가 로그인에 성공하면 권한 요청 시에 파라미터로 보낸 redirect_uri로 리다이렉션된다. 이때 파라미터에 인증 코드를 함께 제공한다.
GET http://localhost:8080/myapp?code=a1s2f3mcj2
액세스 토큰 응답이란?
인증 코드를 받으면 액세스 토큰으로 교환해야 한다. 이는 로그인 세션에 대한 보안 자격을 증명하는 식별 코드로 /token POST 요청을 보낸다.
POST spring-authrization-server.example.com/token
{
"client_id" : "66a37v4b2",
"client_secret" : "aabb11nn44",
"redirect_uri" : "http://localhost:8080/myapp",
"grant_type" : "authorization_code",
"code" : "a1b2b3bcbqksd"
}
- client_secret : OAuth 서비스에 등록할 때 제공받는 비밀키
- grant_type : 권한 유형을 확인할 때 사용한다. 이때, authorization_code로 설정해야 한다. 권한 서버는 요청 값을 기반으로 유효한 정보인지 확인하고, 유효한 정보라면 액세스 토큰을 응답한다.
{
"access_token" : "aasbffb",
"token_type" : "Bearer",
"expires_in" : 3600,
"scope" : "openid profile",
...
}
액세스 토큰으로 API 응답 & 반환
제공받은 액세스 토큰을 통해 리소스 오너의 정보를 가져올 수 있다. 정보가 필요할 때마다 API호출을 통해 정보를 가져오고 서버는 토큰이 유효한지 검사한 뒤 응답
GET spring-authorization-resource-server.example.com/userinfo
Header : Authorization : Bearer aasbdffb
쿠키란 ?
웹사이트가 사용하는 서버에서 로컬 환경에 저장하는 작은 데이터
쿠키는 키와 값으로 이루어져 있으며 만료 기간, 도메인 등의 정보를 가지고 있다. HTTP 요청을 통해 쿠키의 특정 키에 값을 추가할 수 있다.
토큰 발급받기
1단계 )
https://cloud.google.com/cloud-console?hl=ko
Google Cloud 콘솔 | Cloud Console - 웹 UI 관리
콘솔에서 데이터 분석, VM, 데이터 스토어, 데이터베이스, 네트워킹, 개발자 서비스 등 클라우드 애플리케이션의 모든 것을 관리하세요.
cloud.google.com
콘솔에서 새로운 프로젝트를 생성한다.
여기서 생성된 설정 값을 스프링 부트 애플리케이션 설정 파일에 등록해야 한다.
'어플리케이션개발 > springboot실습' 카테고리의 다른 글
Springboot3 실습 (6) - AWS에 프로젝트 배포하기 (0) | 2024.04.23 |
---|---|
Springboot3 실습 (5) - Oauth2로 로그인/로그아웃 구현(2) (0) | 2024.04.17 |
Springboot3 실습 (4) - JWT로 로그인/로그아웃 구현하기 (0) | 2024.04.03 |
Springboot3 실습 (3) - 스프링 시큐리티(로그인, 회원가입) (1) | 2024.04.02 |
Springboot3 실습 (2) - 기본 CRUD 화면 개발 (1) | 2024.03.27 |