grant_type
간단흐름(쿠팡기준으로 설명 grant_type = password기준)
- 고객, 앱, 앱개발자, 인증서버, 자원서버(api서버) 이렇게 5가지 주체가 있다.
- 앱개발자는 인증서버에 admin페이지에서 client_id/secret_id를 발급받는다. (고객이 발급받는게 아님에 주의)
- 앱에서 고객이 id/pwd를 넣고 로그인하면(인증서버에 api를 보내면) 인증서버에는 고객id/고객pwd, (앱개발자가앱에넣은) client_id/secret_id 이렇게 4가지 정보를 받는다. 모두 이상 없는경우 앱에게 access token을 넘겨준다.
- 그럼 앱은 고객에게 권한을 위임받는 것이고, 이 이후로는 특정시간동안 자원서버에 access token을 보내서 api호출이 가능하다.
- 하지만 이 방식은 앱이 고객의 비밀번호를 직접 다루게 되므로 보안상 위험이 커서, 요즘은 거의 사용되지 않는다.
grant_type = authorization_code
- 앱에서 고객 id/pwd를 받고 인증서버에 api로 전달하는게 위험하니..
- 앱이 아닌 인증서버쪽 로그인 화면으로 url redirect를 시키는게 authrization_code방식이다.
- 로그인후에 앱에 다시 인증코드가 담긴 url을 불러주면
- 앱은 짧은 생명주기를 가진 이 인증코드로 서버에 api호출을 해서 access token을 받아온다.
- (딥링크 방식에서도 이 인증코드 → access token 교환 구조가 유사하게 사용된다.)
grant_type = client_credentials
- 서버 간(M2M) 통신 – 사용자 개입 없이 서비스 간 호출
PKCE(Proof Key for Code Exchange)
PKCE는 공개 클라이언트에서 Authorization Code Grant를 안전하게 사용할 수 있게 해주는 확장입니다.
클라이언트가 매 인가 요청 시 고유한 code_verifier를 만들고, 이를 SHA-256 해시한 code_challenge를 전달합니다.
토큰 발급 단계에서 클라이언트는 원본 code_verifier를 보내고, 인증 서버는 해시 값을 비교해 검증합니다.
이렇게 함으로써 인가 코드가 중간에 탈취되더라도, 올바른 code_verifier 없이는 토큰을 발급받을 수 없게 되어 보안성이 크게 향상됩니다.PKCE는 RFC 7636에 정의되어 있으며, 요즘은 SPA·모바일 앱용 OAuth 표준으로 자리 잡았습니다.
(모바일앱의 경우 client_secret을 탈취할 가능성이 커서 따로 저장하지 않기 위함)
state 검증
CSRF 공격 방지를 위해 인가 요청 시 생성한 state 값을 콜백에서 체크
인가요청시 state=난수를 client가 넣고, 콜백에서도 전달받는 state가 그 난수가 맞는지 체크.
반응형
'System Architect' 카테고리의 다른 글
| 업스트림(upstream)/다운스트림(downstream) (0) | 2025.05.30 |
|---|---|
| 딥링크 (0) | 2025.05.23 |
| 시스템설계 Q&A 3 (0) | 2025.04.06 |
| 위임(delegate) 패턴 (0) | 2024.02.17 |
| Application (1) | 2023.10.28 |
