Skip to content

변경 로그

2026-05-28 — RP 등록 허들 (Phase 2–5e) + Agent Quickstart

AI 에이전트가 자동화로 RP (Relying Party) 를 양산하는 시나리오 차단 + 단일 진입점 docs 정비.

Docs / agent surface

  • Agent Quickstart 신설 — /guide/agent-quickstart (한국어, 308 라인) + .en (영문 미러). 8단계 실행 순서 + 트랙 자동 감지 + F1-F8 함정 + Self-verify 체크리스트. llms.txt 최상단 ## ⭐ Agents start here 섹션이 이 페이지를 단일 진입점으로 노출.
  • Webhook signature templatestemplates/webhook (rails.rb / express.ts / nextjs-route.ts). dual signature format + 5분 replay window + timing-safe compare 박힘. // TODO: verify signature 안티패턴 차단.
  • "📋 Copy for LLM" 버튼 — 모든 docs 페이지 우상단. 현재 페이지의 .md 미러를 clipboard 복사 + 2초 토스트. 다국어 + 다크 모드 + 모바일 대응.
  • @1pass/mcp v0.2.0 — read-only docs 도구 3종 (fetch_quickstart / get_doc / list_docs) 추가. 인증 불필요. Claude Desktop · Cursor · Codex 에서 자연어로 logi docs fetch.

RP 등록 허들 (server-side, autoDeploy=off, manual deploy)

  • identity_verified_level 차단unverified developer 는 RP 등록 차단. JSON 응답에 verify_url 포함. 콘솔 페이지에는 영구 배너 + "✉️ 인증 메일 보내기" CTA 노출 (Phase 5c).
  • created_via 채널 기록web | cli | mcp | api | rake. X-Logi-Client-Type 헤더로 자기 식별. 감사 로그에 영구 기록.
  • 자동 위험 평가 (creation_risk_flags jsonb)wildcard_redirect_uri / sensitive_scope / unlisted_scope / high_volume_developer (7일 ≥5건) / new_developer_account (가입 7일 이내) / suspicious_app_name (placeholder 정규식). 등록 시점에 평가 → DB 영구 기록.
  • Race-safe high-volume 카운트Current.user.with_lock { evaluate + save } 로 동시 등록 직렬화. 5건 동시 fire 도 정확히 1건만 통과.
  • Rack::Attack throttle — POST /developer/applications 10/h + 30/d per developer session. POST /api/v1/applications 동일 캡 per PAK 토큰 (CLI/MCP/자동화 양산 차단). global api/ip 60/min 과 defense-in-depth 동시 적용.
  • High-risk approval ack 게이트wildcard_redirect_uri / sensitive_scope 단독 또는 2+ flags 누적이면 admin 이 명시적 risk_acknowledged: true 없이 approve 불가. 웹 콘솔은 "⚠ 위험 알면서 승인" 버튼으로 교체 + Turbo confirm 다이얼로그가 flag 목록 표시. iOS admin API (/api/v1/admin/applications/:id/approve) 는 누락 시 HTTP 409 risk_acknowledgement_required. ApplicationSubmission#approve! + auto_approve_during_beta 도 동일 게이트.
  • AdminAlertMailer high-risk 알림creation_risk_flags 비어있지 않으면 mailer deliver_later. 30분 per-developer cooldown (Rails.cache) + enqueue 실패 rescue. 수신처는 RP_HIGH_RISK_ALERT_TO env 로 설정 (운영자 전용).
  • Admin queue UI 강화 — 각 앱 row 에 risk 배지 + created_via 표기. "⚠ 위험 신호 있음" 빠른 필터. 상단에 최근 7일 risk 통계 카드 (총 신규 / 위험 신호 포함 / ack-pending 카운트 + top 5 flag 분포).

Migration

  • 20260528130250_add_creation_audit_to_oauth_applicationsoauth_applications.created_via (string, default web) + creation_risk_flags (jsonb, default []) + partial index on jsonb_array_length(creation_risk_flags) > 0.

Tests

  • 모델/요청/메일러 합산 102+ examples PASS (Phase 2–5e 통합 회귀).
  • Codex review 6라운드 (Phase 2 / 3 / 4 / 5a / 5b / 5b-followup) — 모든 BLOCK 해소.

2026-05-15

  • LogiAuth Swift SDK 0.1.2handleCallback 에 redirect_uri scheme/host/path 검증 추가 (ainote 2026-05-15 incident fix)
  • @logi-auth/browser@0.1.0 npm 출시 — SPA 용 zero-deps PKCE SDK
  • OIDC Discovery 문서 보강response_modes_supported, ui_locales_supported, service_documentation, revocation_endpoint_auth_methods_supported (basic/post; none 제외), claims_parameter_supported / request_parameter_supported / request_uri_parameter_supported / require_request_uri_registration (false 명시)
  • /diagnose 엔드포인트 복구 — 누락된 DiagnoseController + 뷰 추가 (RP 셀프 진단)
  • docs.1pass.dev 트랙 분리/tracks/{mobile,web,api} 신설, llms.txt 에 line-numbered jump index 도입
  • 양방향 Cross-Host Handoff API 추가 (PR #28-32) + global logout
  • 콘솔 SSO Phase 3 (start.1pass.dev) + 데스크톱 웹 SSO Phase 1+2 도입 (Mac Safari Universal Link bouncer)
  • multi-role join table 도입 — host 별 role 분리 (Phase 1)

2026-05-11 — target_session_token PoP 추가

같은 디바이스에서 두 계정 세션을 모두 보유한 사용자가 OTP 이메일 왕복 없이 계정 통합을 할 수 있도록 새 자격증명 경로 추가.

  • 신규 엔드포인트 POST /api/v1/me/merge/session-token — target 세션에서 5분 TTL 토큰 발급
  • 기존 POST /api/v1/me/mergetarget_session_token 또는 otp_code 둘 중 하나 수용
  • 두 자격증명 동시 제공 시 422 conflicting_credentials
  • 감사 로그 marker: merged_via=session_token (OTP 의 merged_via=otp 와 구분)

자세한 흐름은 session-token PoP 가이드.

2026-05-11 — Easy Bracket RP 의 canonical resolution 적용

Easy Bracket (RP, https://easy-bracket-lookbook.onrender.com) 가 logi 계정 통합을 반영하는 canonical_user_ids resolution 을 운영 환경에 적용. ENFORCE_CANONICAL_RESOLUTION=true flip 완료 (현재 통합된 사용자 0명 — 향후 첫 머지부터 자동 작동).

  • Pundit 정책 전체가 user.canonical_user_ids 기준 ownership 체크
  • ActionCable / 백그라운드 잡 / PttChannel 모델 카노니컬화
  • 푸시 알림 fanout 의 canonical id 중복 제거
  • user.merged webhook 수신 시 device token / api token 즉시 무효화

다른 RP 도 동일한 패턴으로 통합 가능. RP 통합 가이드 참조.

2026-04-27 — Security review wave (Phase 1-14)

전체 코드베이스 보안 리뷰 결과에 따른 일괄 강화. 자세한 항목은 docs/todo/security-review-findings-2026-04-27.md.

Critical

  • P0-1 Device bootstrap 재인증device_secret_digest + dual-mode (bootstrap → secret 1회 노출, refresh → digest 검증). 기존 anonymous 계정 device_uuid만으로 PAK 재발급 차단.
  • P0-2 Identity reporter capabilityidentity_verification_reporter flag + identity_verification_methods allowlist. 임의 OAuth 앱이 신뢰 레벨 변경하던 문제 해소.

High

  • Rate limiting — rack-attack 8개 throttle (login/oauth/devices/identity/otp/passkeys/api 전반)
  • Webhook SSRF — 등록·디스패치 모두 DNS 검증, 사설/링크-로컬/멀티캐스트 차단 (IPv4+IPv6). DNS rebinding 방어를 위해 검증된 IP로 직접 connect.
  • Webhook secret 재설계webhook_secret_plaintext를 ActiveRecord encryption으로 저장. BCrypt fallback 사용 시 X-Logi-Secret-Deprecated 헤더 + Deprecation (RFC 9745).
  • Passkey UV 정책purpose=step_up 도입 → user_verification: required 강제. UV 실제 수행 여부(authenticator_data.user_verified?)로만 otp_verified_at 설정.
  • OAuth authorize 복귀 — 미로그인 시 request.fullpathreturn_to_after_authenticating에 저장 → state/scope/redirect_uri/code_challenge 보존.
  • Session fixation — 로그인 성공 시 reset_session 호출 (필요한 키만 보존 후 재저장).

Medium

  • identity:level scope 신규identity_verified_levelprofile에 자동 포함되던 동작이 deprecated. 신규 앱은 identity:level 명시 요청 필요. 기존 앱은 legacy_identity_claim=true로 호환 유지 (6개월 마이그레이션 기간).
  • CSP report-only 활성화default-src 'self', frame-ancestors 'none', /csp-violation-report sink. enforce 전환은 위반 로그 분석 후.
  • CORSoauth_applications.allowed_origins 동적 검증. wildcard + credentials 조합 사용 안 함.
  • Secret 만료 정책client_secret_expires_at / webhook_secret_expires_at 1년 TTL + 30일 전 audit log 알림. 만료된 client_secret으로 토큰 발급 시 invalid_client.

SDK 사용자 영향 정리

  • ⚠️ EncryptedSharedPreferences (androidx.security:security-crypto 1.1.0) deprecated — 신규 SDK에서 사용 금지. DataStore + Tink 또는 Ackee Guardian 권장.
  • ⚠️ iOS Keychain 옵션 명시 필수: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly (suffix 없으면 iCloud Keychain sync).
  • ⚠️ flutter_secure_storage 10.0+에서 Android backup 제외(backup_rules.xml) 직접 설정 필요.
  • ⚠️ webhook 수신 측은 X-Logi-Secret-Deprecated: true 헤더 처리 + 회전 안내.
  • 새로운 모바일 가이드: iOS, Android, Flutter, React Native.

v0.1-alpha (2026-04-22 sync)

완료된 마일스톤 (GitHub tags 참조):

  • m0-bootstrap — Rails 8 scaffold, Cloudflare/Render 체크리스트
  • m1-auth — 기본 Auth (role + device_uuid + lockout)
  • m2-oauth-core — OAuth 2.0 + PKCE S256 + JWKS + Refresh rotation
  • m3-developer-portal — Developer Portal + Admin (iOS 26 Liquid Glass)
  • m4-consent — Consent 화면 + Consent 레코드
  • m5-cli — Personal API Keys + logi CLI (Ruby/Thor)
  • m7-otp — TOTP 2FA + 백업 코드 + 민감작업 게이트
  • m8-m10-security-observability — Passkey + Login Logs + Webhooks
  • m12-m13 — Suspicious Detection + Admin Audit
  • m6-ios-scaffold / m6-m11-ios-mcp — iOS 앱 + MCP 서버
  • m14-docs — VitePress + Scalar 문서 사이트 + OpenAPI 3.1
  • m15-android-scaffold / m15-complete — Android 앱 + Play Integrity round-trip + Sentry
  • 2026-04-22/oauth/revoke (RFC 7009), /oauth/introspect (RFC 7662), 로그인 이력 90일 purge recurring job

알려진 제약

  • 실제 Render / Cloudflare / GitHub Pages 프로덕션 배포 전
  • 푸시 알림 (APNs/FCM) 미구현
  • Play Integrity production decode 및 ANDROID_APP_CERT_SHA256 주입 미완료
  • iOS associated domain은 api.1pass.dev 로 마이그레이션 완료 (v0.4, 2026-04-22)

로드맵 (β)

  • β1: 동적 scope + required 마킹 (진행 중)
  • β2: 커스텀 claim (User#custom_claims 구현 완료)
  • β3: 로그인 이력 알림 + APNs/FCM
  • β5: 모바일 프로덕션 하드닝 (Play Integrity decode, cert fingerprint, associated domain 정리)

Identity가 제품의 신뢰를 만듭니다.