- [Spring-boot]스프링시큐리티+OAuth2 인증 (2) 목차
| OAuth2란?
-OAuth의2는 OAuth의1의 유저의 인증플로우, 전반적인 목적만 공유하고 OAuth의1.0을 새로 작성한것입니다.
-OAuth의1.0과 OAuth의2.0의 차이는 앱 애플리케이션, 웹 애플리케이션, 데스크탑 애플리케이션등의 인증방식을 강화하고 Consumer에 개발 간소화를 중심으로 개발 되었습니다.
| OAuth의1.0 과 OAuth의2.0차이점
-인증 절차 간소화 됨으로써 개발자들이 구현하기 더쉬워졌고, 기존에 사용하던 용어도 바뀌면서 Authorizaiton server와 Resource서버의 분리가 명시적으로 되었고 다양한 인증 방식을 지원하게 되었습니다.
인증 절차 간소화
- 기능의 단순화, 기능과 규모의 확장성 등을 지원하기 위해 만들어 졌다.
- 기존의 OAuth1.0은 디지털 서명 기반이었지만 OAuth2.0의 암호화는 https에 맡김으로써 복잡한 디지털 서명에관한 로직을 요구하지 않기때문에 구현 자체가 개발자입장에서 쉬워짐.
용어 변경
- Resource Owner : 사용자 (1.0 User해당)
- Resource Server : REST API 서버 (1.0 Protected Resource)
- Authorization Server : 인증서버 (API 서버와 같을 수도 있음)(1.0 Service Provider)
- Client : 써드파티 어플리케이션 (1.0 Service Provider 해당)
다양한 인증 방식(Grant_type)
- Authorization Code Grant
- Implicit Grant
- Resource Owner Password Credentials Grant
- Client Credentials Grant
- Device Code Grant
- Refresh Token Grant
| 인증 종류
OAuth 2.0의 인증종류는 6가지 입니다. 아래는 각각의 인증방식의 flow와 간단한 설명입니다.
Authorization Code Grant
-일반적인 웹사이트에서 소셜로그인과 같은 인증을 받을 때 가장 많이 쓰는 방식으로 기본적으로 지원하고 있는 방식이다. 아래는 Authorization Code Grant type 으로 Access Token을 얻어오는 시퀀스 다이어그램이다.
1.Client가 Redirect URL을 포함하여 Authorization server인증 요청을 합니다.
2.Authorization Server는 유저에게 로그인창을 제공하여 유저를 인증하게 합니다.
3.Authorization Server는 Authorization Code를 Client에게 제공해줍니다.
4.Client는 code를 Authorization Server에 Access Token을 요청합니d다.
5.Authorization Server는 Client에게 Access token을 발급해줍니다.
6.Access token을 이용하여 Resource Server에 자원을 접근할 수 있게 합니다.
7.토큰이 만료(invalid) 된다면 Resource Server에 Refresh Token을 이용하여 토큰을 재발급 받게 합니다.
Implicit Grant
-Public Client인 브라우저 기반의 애플리케이션(Javascript application)이나 모바일 애플리케이션에서 바로 Resource Server에 접근하여 사용할 수 있는 방식이다.
- 클라이언트는 Authorization server에 인증을 요청한다.
- User는 Authorization Server를 통해 인증을합니다.
- Authorization Server는 Access Token을 포함하여 클라이언트의 Redirect url을 호출합니다
- 클라이언트는 해당 Access Token이 유효한지 Authorization Server에 인증 요청을 합니다.
- 인증서버는 그 토큰이 유효하다면 토큰의 만기시간(Validation)과 함께 리턴해줍니다.
- Client는 Resource Server에 접근할 수 있게 됩니다.
Resource Owner Password Credentials Grant
-Client에 아이디/패스워드를 받아 아이디/패스워드로 직접 access token을 받아오는 방식이다.
-Client가 신용이 없을 때에는 사용하기에 위험하다는 단점이 있습니다.
-클라이언트가 확실한 신용이 보장될 때 사용할 수 있는 방식입니다.
- User가 ID와 Password를 입력합니다.
- 클라이언트는 유저의 ID, Password, 클라이언트 정보를 넘긴다.
- Authorization Server는 Access Token을 넘겨줍니다.
Client Credentials Grant
-애플리케이션이 Confidential Client(신뢰하는 Client)일 때 ID와 Secret을 가지고 인증하는 방식입니다.
- 클라이언트 정보를 Authorization server에 넘긴다.
- Access Token을 Client에 전달한다.
Device Code Grant
장치 코드 부여 유형은 브라우저가 없거나 입력이 제한된 장치에서 사용됩니다.
Refresh Token Grant
기존에 저장해둔 리프러시 토큰이 존재할 때 엑세스토큰 재발급 받을 필요가 있을 때 사용한다. 그리고 기존 액세스는 토큰이 만료됩니다.
참고
'Spring > Spring boot' 카테고리의 다른 글
[Springboot]@Builder란? (0) | 2020.02.22 |
---|---|
[Spring-boot]스프링시큐리티+OAuth2 소셜로그인 (3) (0) | 2020.02.11 |
[Spring-boot]스프링시큐리티+OAuth1 인증 (1) (0) | 2020.02.11 |
[Springboot]JPA란? (0) | 2020.02.06 |
[Spring boot]@Test란? (0) | 2020.01.22 |