OAuth 2.0
* RFC 6749 (URL)
- 한 Application에서 다른 Application으로 하여금
데이터와 기능에 대한 권한을 부여하는 절차에 대한 표준이자 프레임워크이다.
(Authorization (URL) 절차에 대한 표준 및 프레임워크이다.)
- Access Token을 Request하고 Response하는 절차에 대한 표준이다.
- OAuth 2.0에서 Client는 아래와 같이 두가지 타입으로 구분된다.
(Client의 타입에 따라 인가 과정이 달라진다.)
- Credential Type Client
- 비밀값을 안전히 저장할 수 있는 능력이 있는 Client를 의미한다. - Public Type Client
- 비밀값을 안전히 저장할 수 없는 (코드에 내재된) 단순한 프로그램을 의미한다.
Authorization Process (인가 절차)
Step | Description | |
1 | Give me an access token | - Client App이 Authorization Server에게 Access Token을 Request한다. |
2 | Do you give the permissions to the client application? |
- Authorization Server가 User에게 Client App에 대한 권한을 부여할 것인지를 묻는다. |
3 | Yes, please | - User에 권한을 부여하겠다 결정한다. |
4 | Here you are | - Authorization Server가 Client App에게 Access Token을 보내주며 Response한다. |
Authorization Code Flow (RFC 6749 4.1)
* Legend (범례)
Legend | Description |
Orange Box | - Display of Client Application (Shopping Application) |
Green Box | - Service Server (Authorization, Resource) |
Endpoint | - 서버의 Access Point (Port, Interface 등) |
Access Token | - Application이 User의 Resource에 접근할 수 있게 하는 수단 |
Authorization Step (between App - Auth Server) |
Description | |
1 | App asks User whether to link to Service, and User responds to it. |
- App이 사용자에게 인가 서비스에 연동할 것을 묻고, 사용자가 이에 응한다. |
2 | App makes an Authorization Request to Service's Authorization Endpoint. |
- App이 인가 서비스 서버의 Authorization Endpoint에 Authorization Request를 전송한다. |
3 | Service returns an Authorization Page to App. | - 인가 서비스 서버가 애플리케이션에 Authorization Page를 전달한다. |
4 | App displays the Authorization Page to User. | - 애플리케이션이 사용자의 화면에 Authorization Page를 출력한다. - Authorization Page에는 누구에게 어떤 권한을 부여할 것인지가 명시되어 있고 사용자를 인증하는 절차를 수행한다. |
5 | User checks the Requested Permissions, inputs ID and Password to Login Service, and approves the Authorization Request. |
- 사용자는 요청된 권한을 확인하고 ID와 패스워드를 입력하여 인증함으로써 Authorization Request를 승인한다. |
6 | Service issues a Short-Lived Authorization Code. | - 유저의 승인이 떨어진 후, Authorization Server는 Short-Lived Authorization Code를 발행하여 애플리케이션에 전달한다. |
7 | App presents the Authorization Code to Service's Token Endpoint. |
- 애플리케이션은 Short-Lived Authorization Code를 Authorization Server에 전송하며 Access Token을 요청한다. |
8 | Service issues an Access Token to App. | - Authorization Server가 전달받은 Short-Lived Authorization Code가 유효한지를 확인하고, 유효하다면 Access Token을 애플리케이션에 전송한다. |
Web API Call Step (between App - Resource Server) |
Description | |
A | App presents the Access Token and Requests Resource. |
- 애플리케이션이 Resouce Server에 Access Token을 전송하며 사용자의 Resource를 요청한다. |
B | Resource Server inquires of Authorization Server info about the Access Token. |
- Resource Server가 Authorization Server에 해당 Access Token이 유효한지를 묻는다. |
C | Authorization Server returns info about the Access Token. |
- Authorization Server가 Resource Server에게 해당 Access Token에 대한 정보를 보낸다. (해당 Access Token의 유효성이 확인된다.) |
D | Resource Server verifies the Access Token and returns the Requested Resource. |
- Resource Server가 Access Token을 검증하고 애플리케이션에게 요청한 Resource를 보내준다. |
※ Access Token을 발급하여 Resource를 요청하는 과정을 세분화하는 이유는
End Point가 하나로 통합되는 것을 방지하여 보안성을 제고하기 위함이다.
Client Credentials Flow (RFC 6749 4.4)
- Server가 Client를 알고 있고 인증이 가능한 상황에서 이루어지는 인가 과정이다.
- Client는 특정 사용자의 정보를 요청하는 것이 아닌, General한 정보를 요청하는 경우에 대한 Flow이다.
* Legend (범례)
Legend | Description |
Orange Box | - Display of Client Application (Shopping Application) |
Green Box | - Service Server (Authorization, Resource) |
Endpoint | - Access Point (Port, Interface 등) |
Access Token | - Application이 User의 Resource에 접근할 수 있게 하는 수단 |
Authorization Step (between App - Auth Server) |
Description | |
1 | App makes a Token Request to Service's Token Endpoint. |
- 애플리케이션이 Authorization Server의 Token Endpoint에 Access Token 요청을 전송한다. |
2 | Service issues an Access Token to App. | - Authorization Server는 Access Token을 발행하여 애플리케이션에 전송한다. |
※ User에 대한 Authentication 과정이 없는 이유는
Client Credential Flow가 특정 사용자에 대한 정보를 요청하는 것이 아닌,
General한 정보를 요청하는 과정이기 때문이다.
Web API Call Step (between App - Resource Server) |
Description | |
A | App presents the Access Token and Requests Resource. |
- 애플리케이션이 Resouce Server에 Access Token을 전송하며 사용자의 Resource를 요청한다. |
B | Resource Server inquires of Authorization Server info about the Access Token. | - Resource Server가 Authorization Server에 해당 Access Token이 유효한지를 묻는다. |
C | Authorization Server returns info about the Access Token. |
- Authorization Server가 Resource Server에게 해당 Access Token에 대한 정보를 보낸다. (해당 Access Token의 유효성이 확인된다.) |
D | Resource Server verifies the Access Token and returns the Requested Resource. |
- Resource Server가 Access Token을 검증하고 애플리케이션에게 요청한 Resource를 보내준다. |
Refresh Token Flow (RFC 6749 6)
- 이 Flow에서는 클라이언트 애플리케이션이 이전에 Authorization 과정을 거친 이력이 있어
Refresh Token을 발급받은 이후라 가정한다.
* Legend (범례)
Legend | Description |
Orange Box | - Display of Client Application (Shopping Application) |
Green Box | - Service Server (Authorization, Resource) |
Endpoint | - Access Point (Port, Interface 등) |
Access Token | - Application이 User의 Resource에 접근할 수 있게 하는 수단 |
Refresh Token | - Access Token과 함께 발급되는 Token으로 최초의 인증 이후에 추가과정 없이 재인증시 사용하는 Token이다. |
Authorization Step (between App - Auth Server) |
Description | |
1 | App requests Service's Token Endpoint to reissue an Access Token. |
- 애플리케이션이 Authorization Server의 Token Endpoint에 Access Token의 재발행 요청을 전송한다. |
2 | Service issues an Access Token to App. |
- Authorization Server는 Access Token을 재발행하여 애플리케이션에 전송한다. |
Web API Call Step (between App - Resource Server) |
Description | |
A | App presents the Access Token and Requests Resource. |
- 애플리케이션이 Resouce Server에 Refresh Token을 전송하며 사용자의 Resource를 요청한다. |
B | Resource Server inquires of Authorization Server info about the Access Token. |
- Resource Server가 Authorization Server에 해당 Refresh Token이 유효한지를 묻는다. |
C | Authorization Server returns info about the Access Token. |
- Authorization Server가 Resource Server에게 해당 Refresh Token에 대한 정보를 보낸다. (해당 Refresh Token의 유효성이 확인된다.) |
D | Resource Server verifies the Access Token and returns the Requested Resource. |
- Resource Server가 Access Token을 검증하고 애플리케이션에게 요청한 Resource를 보내준다. |
Reference: OAuth 2.0, URL, 2022.04.29 검색
Reference: 2022학년도 1학기 홍익대학교 네트워크 보안 강의, 이윤규 교수님