변경 로그
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 templates — templates/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/mcpv0.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 차단 —
unverifieddeveloper 는 RP 등록 차단. JSON 응답에verify_url포함. 콘솔 페이지에는 영구 배너 + "✉️ 인증 메일 보내기" CTA 노출 (Phase 5c). created_via채널 기록 —web | cli | mcp | api | rake.X-Logi-Client-Type헤더로 자기 식별. 감사 로그에 영구 기록.- 자동 위험 평가 (
creation_risk_flagsjsonb) —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/applications10/h + 30/d per developer session. POST/api/v1/applications동일 캡 per PAK 토큰 (CLI/MCP/자동화 양산 차단). globalapi/ip60/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 409risk_acknowledgement_required.ApplicationSubmission#approve!+auto_approve_during_beta도 동일 게이트. - AdminAlertMailer high-risk 알림 —
creation_risk_flags비어있지 않으면 mailerdeliver_later. 30분 per-developer cooldown (Rails.cache) + enqueue 실패 rescue. 수신처는RP_HIGH_RISK_ALERT_TOenv 로 설정 (운영자 전용). - Admin queue UI 강화 — 각 앱 row 에 risk 배지 +
created_via표기. "⚠ 위험 신호 있음" 빠른 필터. 상단에 최근 7일 risk 통계 카드 (총 신규 / 위험 신호 포함 / ack-pending 카운트 + top 5 flag 분포).
Migration
20260528130250_add_creation_audit_to_oauth_applications—oauth_applications.created_via(string, defaultweb) +creation_risk_flags(jsonb, default[]) + partial index onjsonb_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.2 —
handleCallback에 redirect_uri scheme/host/path 검증 추가 (ainote 2026-05-15 incident fix) @logi-auth/browser@0.1.0npm 출시 — 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/merge가target_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.mergedwebhook 수신 시 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 capability —
identity_verification_reporterflag +identity_verification_methodsallowlist. 임의 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.fullpath를return_to_after_authenticating에 저장 → state/scope/redirect_uri/code_challenge 보존. - Session fixation — 로그인 성공 시
reset_session호출 (필요한 키만 보존 후 재저장).
Medium
identity:levelscope 신규 —identity_verified_level이profile에 자동 포함되던 동작이 deprecated. 신규 앱은identity:level명시 요청 필요. 기존 앱은legacy_identity_claim=true로 호환 유지 (6개월 마이그레이션 기간).- CSP report-only 활성화 —
default-src 'self',frame-ancestors 'none',/csp-violation-reportsink. enforce 전환은 위반 로그 분석 후. - CORS —
oauth_applications.allowed_origins동적 검증. wildcard + credentials 조합 사용 안 함. - Secret 만료 정책 —
client_secret_expires_at/webhook_secret_expires_at1년 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_storage10.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 rotationm3-developer-portal— Developer Portal + Admin (iOS 26 Liquid Glass)m4-consent— Consent 화면 + Consent 레코드m5-cli— Personal API Keys +logiCLI (Ruby/Thor)m7-otp— TOTP 2FA + 백업 코드 + 민감작업 게이트m8-m10-security-observability— Passkey + Login Logs + Webhooksm12-m13— Suspicious Detection + Admin Auditm6-ios-scaffold/m6-m11-ios-mcp— iOS 앱 + MCP 서버m14-docs— VitePress + Scalar 문서 사이트 + OpenAPI 3.1m15-android-scaffold/m15-complete— Android 앱 + Play Integrity round-trip + Sentry2026-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 정리)