Cloudflare가 OAuth 인증에 선택적 스코프(optional scopes) 기능을 도입했다. 기존 "전부 또는 아무것도 아님" 방식 대신 사용자가 앱에 부여할 권한을 개별 스코프 단위로 선택·거부할 수 있게 되어, 최소 권한 원칙을 OAuth 동의 흐름에서 직접 구현할 수 있다. 6월 이후 수천 개의 타사 OAuth 앱이 생성됐고 100만 회 이상의 인증이 발생했다.
핵심 포인트- 개발자가 OAuth 클라이언트 등록 시 스코프를 필수(scopes)와 선택(optional_scopes)으로 분리해 선언 가능하다.
- 사용자가 동의 화면에서 선택적 스코프를 개별로 거부할 수 있으며, 승인하지 않은 스코프는 발급 토큰에 포함되지 않는다.
- 요청되지 않은 스코프는 동의 화면에 표시조차 되지 않아 권한 범위를 명확히 한다.
- 기존 OAuth 클라이언트는 별도 설정 없이 현재 동작을 그대로 유지해 하위 호환성이 보장된다.
- 인증 코드 교환 후 실제로 부여된 스코프 집합을 확인하는 로직이 앱 측에 필요하다.
상세 정리- 배경: 기존 OAuth 동의 모델은 전체 권한 승인 또는 앱 거부만 가능해, 일부 스코프만 주고 싶은 사용자에게 선택지가 없었다.
- API 변경: oauth_clients 엔드포인트에 optional_scopes 배열을 추가해 클라이언트를 등록하면, 해당 스코프는 동의 화면에서 선택 해제 가능하도록 표시된다.
- 동의 흐름: 사용자가 선택적 스코프를 거부해도 나머지 필수 스코프가 승인되면 인증이 진행되고, 부여된 스코프만 포함된 액세스 토큰이 발급된다.
- 개발자 핸들링 의무: 인증 코드 교환 후 실제로 부여된 스코프 집합을 확인해야 한다. 선택적 스코프가 없을 경우의 degraded 모드를 앱이 처리해야 한다.
- 미표시 최적화: 요청하지 않은 스코프는 동의 화면에 표시되지 않아 사용자 혼란을 줄인다.
- curl 예시: optional_scopes에 workers-kv-storage.write, zone.read를 지정하면 사용자가 이 두 스코프를 개별로 거부할 수 있다.
- 하위 호환: 기존 클라이언트는 새 필드를 사용하지 않아도 되며 현재 동작이 자동 유지된다.
- 활용 사례: zone.read처럼 일부 사용자 워크플로우에서는 불필요한 권한을 optional로 분류해 최소 권한 원칙을 구현할 수 있다.
왜 읽나OAuth를 이용한 서드파티 앱 또는 플랫폼 API 권한 흐름을 설계하는 백엔드·보안 개발자에게 최소 권한 원칙을 실제 동의 UX에 적용하는 구체적인 방법을 제공한다.