Scope 레퍼런스
Scope는 공백 구분 문자열입니다 (profile email phone, 콤마 ❌).
표준 Scope
| scope | userinfo 반환 필드 | 비고 |
|---|---|---|
profile | sub, email, email_verified, identity_verified_level | 기본 신원 |
email | sub, email, email_verified | profile의 부분집합 |
phone | sub, phone_number, phone_number_verified | Phase 2에서 실제 필드 추가 예정 |
openid | id_token 발급 + sub | OpenID Connect 1.0 활성화 |
identity_verified_level
logi는 실명/주민번호를 절대 보유하지 않습니다. 대신 정수 플래그만 제공:
0unverified (기본)1email_verified (logi 자체, magic link — Phase 2)2phone_verified (logi 자체 — Phase 2)3sp_verified (SP가 NICE/KCB 등으로 실명인증 후 보고 — Phase 2)
제휴사는 이 정수로 게이팅만 수행하고, 실제 실명 데이터는 자체 인증 서비스에서 관리합니다.
커스텀 Scope (Phase 2)
제휴사는 자신의 도메인에 맞는 커스텀 scope를 등록할 수 있습니다. 네임스페이스 필수:
krx_listing:reviewer_role
enterprise_x:tier
blog:post.write형식: <namespace>:<key> — 콜론 1개 기준 prefix로 앱과 매칭.
서버 측에서는 User#custom_claims 가 jsonb로 {namespace: {key: value}} 구조로 저장되며, 해당 scope 요청 시 id_token/userinfo에 병합됩니다 (β1-4).
제휴사 등록 시 allowed_scopes
앱 등록 시 허용할 scope를 지정합니다:
json
{
"oauth_application": {
"name": "My App",
"redirect_uris": ["https://app.example.com/cb"],
"allowed_scopes": ["profile", "email"]
}
}사용자가 이보다 넓은 scope를 요청하면 302 redirect_uri?error=invalid_scope.
required 마킹 (β1-6)
제휴사는 특정 scope를 필수로 표시할 수 있습니다. Consent 화면에 "필수" 배지가 붙고, 거부 시 "이 정보 없이는 서비스 이용 불가" 메시지가 표시됩니다.
ruby
# Rails console 예시
app.oauth_application_scopes.create!(
oauth_scope: profile_scope, required: false
)
app.oauth_application_scopes.create!(
oauth_scope: email_scope, required: true # 필수
)사용자가 필수 scope를 거부하면 access_denied + 정책 안내 페이지가 표시됩니다.
재인가 UX
사용자가 제휴사 A에 profile email 동의한 이후:
| 요청 scope | 동작 |
|---|---|
profile email (동일) | UI 스킵 · 즉시 code 발급 |
profile (축소) | UI 스킵 · 즉시 code 발급 |
profile email phone (확장) | "NEW" 배지 + 추가 동의 요구 |
| Consent revoke 후 | Consent 화면 다시 노출 |
이는 Google 로그인과 같은 UX입니다.
요청 방법
GET /oauth/authorize?...&scope=profile+email+openid&...
^^^^^^^ ^^^^^ ^^^^^^
공백(+)으로 구분, URL encoding 시 %20 또는 +응답 scope 필드는 실제 부여된 scope를 echo (요청 ≠ 응답 가능 — 사용자가 일부만 동의한 경우).