Files
llm-wiki/raw/official-docs/google-oauth-app-verification-state-overview-official.md

12 KiB

title, source_type, url, archive_url, related_branches, related_projects, tags, created
title source_type url archive_url related_branches related_projects tags created
official-doc / Google OAuth App Verification — OAuth App State Overview (Testing / Published-Unverified / Published-Verified) official-doc https://developers.google.com/identity/protocols/oauth2/production-readiness/overview
feature-keycloak-google-redirect-uri-policy
keycloak-patterns
official-doc
keycloak-patterns
auth
oauth2
oidc
2026-07-16

official-doc / Google OAuth App Verification — OAuth App State Overview

Layer: raw/ — 외부 자료(공식 문서)의 원문 발췌·출처 기록. 검증된 요약은 /ingestwiki/concepts/source-summary-template 형식으로 별도 작성. 원본은 raw에 영구 보관.

Parent / 활용 branch

Branch 이 자료가 정당화하는 결정
raw/branch-notes/feature-keycloak-google-redirect-uri-policy D5 — "Google IdP scope는 openid email profile만 사용 → sensitive scope 회피 → verification 심사 불필요" 결정을, developer-doc 측(App Verification 섹션)에서 공식 확인. Testing+External 앱은 기본적으로 test user allowlist(최대 100명)에 한정되지만, basic identity scope(openid/email/profile)만 요청하면 allowlist 없이 임의 사용자가 접근 가능하다는 예외를 명시. 또한 verification(Published-Verified 상태)이 "public apps that request sensitive and restricted scopes"에 요구된다는 것을 명시해 D5의 "sensitive scope 회피 → verification 불필요" 논리의 반대쪽 근거를 제공.

출처 / Source

왜 저장했는지 / Why archived

feature-keycloak-google-redirect-uri-policy D5는 "Google IdP scope를 openid email profile만 사용하면 verification 심사가 불필요하고 unverified 상태로 학습 환경이 동작한다"고 결정했지만, "unverified app + verification 요건" 부분은 verbatim 근거 없이 UNSUPPORTED_DECISION으로 남아 있었다. 본 자료는 Google App Verification 문서군의 "OAuth app state overview" 페이지로, Testing/Published-Unverified/Published-Verified 3개 상태별 접근 범위와 verification 요건을 표로 명시하고, basic identity scope 앱에 대한 allowlist 예외 조항을 담고 있어 그 gap을 developer-doc 측에서 직접 메운다.

핵심 인용 / Key quotes (verbatim, 5문장)

[§Google OAuth Platform behavior comparison — 표 행: Publishing Status=Testing, User Type=External] "Only users explicitly added to the test user allowlist can access the app (limited to a hard cap of 100 test users)."

[§Google OAuth Platform behavior comparison — 같은 행, Testing/External] "Exception: If the app only requests basic identity scopes (openid, email, profile), any user can access without being on the allowlist."

[§Google OAuth Platform behavior comparison — 표 행: Publishing Status=Published, User Type=External, Verification Status=Unverified] "Any Google user can access. Strongly discouraged."

[§Google OAuth Platform behavior comparison — 같은 행, Published/External/Unverified] "for apps requesting sensitive or restricted scopes, unverified app warnings (Danger UI) will be displayed to users, and a hard cap of 100 total users applies."

[§Google OAuth Platform behavior comparison — 표 행: Publishing Status=Published, User Type=External, Verification Status=Verified] "Any Google user can access. Required for public apps that request sensitive and restricted scopes."

Claims Extracted / 추출된 주장

Claim ID Claim (이 자료가 직접 말하는 것) Evidence quote Strength Applies to Does not prove
GOOGLE-VERIFY-STATE-C1 Testing 상태(Publishing Status) + External user type 앱은 test user allowlist에 명시적으로 추가된 사용자만 접근 가능하며, allowlist 상한은 100명이다 [§표: Testing/External] "Only users explicitly added to the test user allowlist can access the app (limited to a hard cap of 100 test users)." official-vendor-doc Testing 상태로 유지되는 External 앱의 기본 접근 제한 규칙 sensitive/restricted scope를 요청하는 앱이 Published로 전환된 뒤에도 동일한 100명 한도가 유지되는지 — Published-Unverified 행은 "총 사용자 100명"이라는 별도 조건(scope 트리거)으로 규정됨(C3 참조), Testing 행의 test-user-allowlist 상한과 동일 quota라는 근거는 본 인용에 없음
GOOGLE-VERIFY-STATE-C2 Testing 상태 앱이 basic identity scope(openid, email, profile)만 요청하면 allowlist 예외가 적용되어, 어떤 사용자도 allowlist 등록 없이 접근할 수 있다 [§표: Testing/External] "Exception: If the app only requests basic identity scopes (openid, email, profile), any user can access without being on the allowlist." official-vendor-doc branch D5의 openid email profile scope 선택 — Testing 상태에서 allowlist 등록 없이 임의 사용자가 접근 가능함을 공식 근거로 확정 이 예외가 Google verification 심사 자체를 완전히 면제한다는 뜻은 아님 — 이 문장은 Testing 상태의 "접근 대상 범위"만 규정하며, 앱을 Published로 전환할 때의 verification 요건은 별도 행(C3·C4)에서 규정됨
GOOGLE-VERIFY-STATE-C3 Published-Unverified 상태(External)는 임의 Google 사용자가 접근 가능하지만 공식 문서가 "Strongly discouraged"로 명시하며, sensitive 또는 restricted scope를 요청하는 앱에는 unverified 경고 UI(Danger UI) 노출과 총 사용자 100명 한도가 적용된다 [§표: Published/External/Unverified] "Any Google user can access. Strongly discouraged." + "for apps requesting sensitive or restricted scopes, unverified app warnings (Danger UI) will be displayed to users, and a hard cap of 100 total users applies." official-vendor-doc 앱을 Testing에서 Published로 전환하되 아직 verification을 완료하지 않은 상태의 위험 평가 basic identity scope만 쓰는 앱이 Published-Unverified 상태에서 100명 cap이나 경고 UI로부터 면제되는지는 이 인용에서 명시적으로 다루지 않음(문장이 "sensitive or restricted scopes 요청 앱"에 한정)
GOOGLE-VERIFY-STATE-C4 Published-Verified 상태에서 임의 Google 사용자가 접근 가능하며, 이 verified 상태는 sensitive 및 restricted scope를 요청하는 public 앱에 대해 요구된다("Required for") [§표: Published/External/Verified] "Any Google user can access. Required for public apps that request sensitive and restricted scopes." official-vendor-doc sensitive/restricted scope(예: Gmail, Drive 등)를 요청하는 프로덕션 공개 앱의 verification 필요성 판단 — D5의 "sensitive scope 회피 → verification 불필요" 논리의 대칭 근거(= sensitive scope를 쓰면 verification이 required) basic identity scope만 쓰는 앱이 Published 상태에서 verification이 "불필요"하다고 이 문장이 직접 명시하지는 않음 — "sensitive/restricted → verified 필요"라는 필요조건만 서술하며, 그 역(비-sensitive scope → verified 불필요)은 이 인용 자체로 직접 증명되지 않는 논리적 추정

Strength 허용값

  • official-standard
  • official-vendor-doc (본 문서 전 claim이 이 값)
  • official-reference
  • company-case-study
  • engineering-blog
  • tutorial
  • needs-confirmation

Usage Boundaries / 적용 경계

  • 이 자료가 직접 증명하는 것:
    • GOOGLE-VERIFY-STATE-C1: Testing/External 앱의 test user allowlist 상한(100명) 규칙
    • GOOGLE-VERIFY-STATE-C2: basic identity scope(openid/email/profile)만 요청하는 Testing 앱은 allowlist 등록 없이 임의 사용자 접근 가능
    • GOOGLE-VERIFY-STATE-C3: Published-Unverified 상태의 위험(경고 UI + 100명 cap, sensitive/restricted scope 요청 시)
    • GOOGLE-VERIFY-STATE-C4: Published-Verified 상태가 sensitive/restricted scope를 요청하는 public 앱에 required임
  • 이 자료가 증명하지 않는 것:
    • basic identity scope만 쓰는 앱이 Published(Testing이 아닌) 상태에서도 verification 없이 무제한 접근 가능한지 — 이 표에서 basic-scope 예외는 Testing 행에만 명시되고 Published 행에는 별도 언급이 없음. D5의 "학습 환경 unverified 상태" 서술은 Testing 상태를 전제로 한다면 C2로 뒷받침되지만, Published 전환 이후는 C3·C4만 근거로 남는다
    • Testing 행의 "100 test users" cap과 Published-Unverified 행의 "100 total users" cap이 동일한 quota인지 — 원문이 두 조건을 서로 다른 행(서로 다른 publishing status)에서 별도로 서술하므로 혼동 금지
    • Keycloak Google IdP 브로커링이 실제로 Google 측 "basic identity scope" 판정 조건을 충족하는 요청을 보내는지(Keycloak default scope 설정이 정확히 openid profile email로 전송되는지)는 이 자료로 증명되지 않음 — keycloak-google-idp-setup(KC-GIDP-C5)이 그 근거
    • Google Workspace 관리자의 "Trusted" override가 개인(비-Workspace) Google 계정 사용자에게도 적용되는지 — 이 문서의 관리자 override 서술은 "Google Workspace 조직에 속한 사용자가 접근하는 경우"에 한정된다고 명시(§Administrative overrides)
  • 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
    • 본 branch 학습 환경(개인 Google 계정, Workspace 아님)에서 Testing+External+basic-identity-scope 조합이 실제로 allowlist 없이 동작하는지 실 등록으로 검증 필요 (branch 전체가 현재 documented-only)
    • D5를 Published 상태까지 포함해 완전히 뒷받침하려면 basic-scope 앱의 Published 행 동작(경고 UI 여부, 100명 cap 적용 여부)을 다루는 별도 Google 문서 보강 필요 — 현재는 Testing 상태 범위로 D5의 UNSUPPORTED_DECISION을 부분 해소

메모 / Notes

나중에 wiki로 옮길 때 참고할 짧은 메모. 검증되지 않은 내 추론은 여기에 두지 말 것.

  • WebFetch 툴이 이 페이지에서 (AI 요약 모드로) paraphrase된 "Key Points" 형식만 반환해 verbatim 인용에 부적합했음 — curl로 raw HTML을 받아 <script>/<style> 태그를 제거하고 텍스트만 추출하는 방식으로 verbatim 원문을 확보함(스크래치패드에 저장한 추출 텍스트 대상 self-grep 실행).
  • 인용 1·2 해석 후보 (미검증): Testing 행의 "test user allowlist" 예외가 basic-scope 앱에서 실제로 Google Cloud Console UI 상 test user 등록 필드 자체를 건너뛸 수 있게 하는지, 아니면 등록은 하되 강제되지 않는 것인지는 원문에서 UI 동작까지 다루지 않음.
  • 관련(중복 아님) 자료: google-oauth-manage-app-audience-official(support.google.com, Testing vs In production + 7일 authorization 만료 규칙)이 같은 branch D5를 뒷받침하는 근접 문서로 이미 raw에 존재. 그 문서는 test-user 등록·7일 만료·Sign in with Google 예외를 다루고, 본 문서는 Published-Unverified/Verified 3단계 상태 + verification 요건(sensitive/restricted scope) + Workspace admin override를 다룸 — 서로 다른 Google 문서 페이지이며 내용이 상호 보완적(중복 아님).
  • 추가로 봐야 할 동일 출처 페이지: "OAuth verification policies" 페이지(본문에서 링크로만 언급, "governed by OAuth verification policies") — sensitive/restricted scope 목록 자체의 verbatim 확보 필요.