오늘은 전에 정리해 두었던  OAuth2.0의 네가지 인증방식의 플로우를 정리해보려고 합니다.


쿼리 문자열에 클라이언트 아이디, 코드, 리다이렉트 URI등을 포함시켜 get 또는 post 방식으로 넘겨주는 방식으로 서버 사이에서 서로 정보(?)를 주고 받습니다.


아래는 각 인증방식의 플로우와 각 번호의 추가적인 설명을 적어보았습니다ㅇ...


먼저 Resource Owner Credential Grant Type입니다. Password Grant라고도 합니당


이 타입은 자사 앱(client)에 직접 로그인하는 방식을 말합니다. 그렇기 때문에 code를 발급받을 필요없이 client로 바로 로그인이 가능합니다.


2. 클라이언트는 포스트 방식으로 매개변수를 전달합니다

- grant_type(여기서는 password)

- client_id

- client_secret

- scope

- username, password

4, 5. authorization server는 아래 내용을 포함하는 JSON파일로 응답합니다.

- token_type(bearer)

- expires_in

- access_token

- refresh_token


다음은 Authorization Code Grant Type입니다


1. 사용자가 client에 접속합니다.

2. 리다이렉트 할 때 문자열 매개변수에 다음을 포함합니다.

- response_type

- client_id

- redirect_uri

- scope

- state with a CSRF token (선택사항)

3. 사용자가 로그인 정보를 전달합니다(로그인 시도).

4. 로그인에 성공하면 2번에서 쿼리 스트링에 포함시켜 넘어온 클라이언트 아이디, 리다이렉트 uri등을 확인하여 일치하는지 확인합니다.

5, 6. owner가 승인하면 client로 리다이렉트할 때 쿼리 매개변수에 다음을 포함합니다.

- code(authorization code를 말합니다)

- state(client로부터 받은 정보 일치 여부 상태를 말합니다)

7. code를 통해 client가 authorization server에 직접 접근할 수 있게 됩니다. client가 POST요청을 보낼 때 쿼리 매개변수에 다음을 포함합니다.

- grant_type(여기서는 authorization_code를 말합니다)

- client_id

- client_secret

- redirect_uri

- code(authorization code)

8. code와 7번에서 받은 정보들을 확인하여 전부 일치하면 access token을 발급합니다. authorization server는 아래 내용을 포함하는 JSON파일로 응답합니다.

- token_type

- expires_in

- access_token

- refresh_token

9. client는 token을 통해 resource server에 직접 접근할 수 있게 됩니다.

* 이때 보통 access token의 유효기간(expires_in)은 한시간 정도입니다. access token의 유효기간이 지나면 refresh token을 통해 access token을 다시 발급받고 resource server에 접속할 수 있게 됩니다.


세번째로는 Implicit Grant Type입니당

이 방식은 authorization code grant type과 비슷하지만 code를 발급받지 않는다는 점과 refresh token이 없다는 점이 다릅니다.


2. 리다이렉트 할 때 쿼리 문자열의 매개변수를 사용해서 다음을 포함합니다.

- response_type

- client_id

- redirect_uri

- scope

- state with a CSRF token (선택사항)

5, 6. owner가 승인하면 client로 리다이렉트 할 때 쿼리 매개변수에 다음을 포함합니다.

- token_type

- expires_in

- access_token

- state(client로부터 받은 정보가 일치하는지 여부 상태를 말합니다)

* Implicit grant type은 refresh token이 없습니다. 


마지막으로 Owner가 없는 Client Credential Grant Type입니당

이 방식은 owner가 존재하지 않으며, client가 직접 authorization server에 접근할 수 있습니다.


1. client가 POST방식으로 쿼리 매개변수를 전달합니다.

- grant_type(여기서는 client_credentials입니다)

- client_id

- client_secret

- scope

4, 5. authorization server는 아래 내용을 포함하는 JSON파일로 응답합니다.

- token_type(bearer)

- expires_in

- access_token 






확실히 authorization code grant type만을 집중적으로 공부해서 그런지 2번만 그나마 자세히 써지는 것 같네요,,,

좀 더 공부해야 할 것 같습니다. 제가 혼자 공부하면서 만들어 본 flow라 틀린 내용이 있을 수도 있습니다... ㅠ3ㅜ.....

+ Recent posts